PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 45


Решение

Воспользуйтесь функцией о rd для преобразования символа в число или функци­ей ch r — для преобразования числа в символ:

$num    = ord($char), $char = chr($num),


1.4. Преобразование между символами и ASCII-кодами    35

Формат %с в функциях printf и spnntf также преобразует число в символ-

$char = sprintf( %c ,   $num),          # Медленнее    чем chr($num)

printf( Number %d is character %c\n ,   $num,   $num) Number   101   is  character  e

Шаблон С*, используемый в функциях pack и unpack, позволяет быстро преоб­разовать несколько символов:

@ASCII = unpack( С*      $stnng) ©STRING = pack( C*      $ascn),

Комментарий

В отличие от низкоуровневых, нетипизованных языков вроде ассемблера, Perl не считает эквивалентными символы и числа; эквивалентными считаются строки и числа. Это означает, что вы не можете произвольно присвоить вместо символа его числовое представление, или наоборот. Для преобразования между символа­ми и их числовыми значениями в Perl существуют функции chr и ord, взятые из Pascal:

$ascu_value = ord( e )        ft Теперь 101 Icharacter      = chг(101),      ft Теперь   е

Символ в действительности представляется строкой единичной длины, поэто­му его можно просто вывести функцией print или с помощью формата %s функ­ций printf и spnntf Формат %с заставляет printf или spnntf преобразовать число в символ, однако он не позволяет вывести символ, который уже хранится в символьном формате (то есть в виде строки).

printf( Number %d  is character %c\n      101    101),

Функции pack, unpack, chr и ord работают быстрее, чем spnntf. Приведем при­мер практического применения pack и unpack.

@ascn_character_numbers = unpack( С* ,     sample ), print    (eiascii_character_numbers\n , 115  97   109   112   108   101

$word = pack( C»      ascn_character_nurabers),

Sword = pack( C*      115,   97,   109,   112,   108    101),     # To же самое

print    $word\n

sample

А вот как превратить HAL в IBM:

$hal =    HAL ,

@ascn = unpack( C* , $hal),




Начало  Назад  Вперед