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


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


sub dec2bm {

my $str = unpack("B32",   pack("N",  shift));

$str =" s/"0+('=\d)//;     » В противном случае появятся начальные нули

return $str;

Чтобы преобразовать строку из единиц и нулей в целое число Perl, дополните ее необходимым количеством нулей, а затем выполните описанную выше проце­дуру в обратном порядке:

sub bin2dec  {

return unpack("N',   pack("B32\   substr('O" x 32      shift,   -32)));

Комментарий

Речь идет о преобразовании чисел между строками вида "00100011" и десятичной системой счисления (35). Строка содержит двоичное представление числа. На этот раз функция spnntf не поможет: в ней не предусмотрен формат для вывода чисел в двоичной системе счисления. Следовательно, нам придется прибегнуть к функциям Perl pack и unpack для непосредственных манипуляций со строковы­ми данными.

Функции pack и unpack предназначены для работы со строками. Строки можно интерпретировать как последовательности битов, байты, целые, длинные целые, числа с плавающей запятой в представлении IEEE, контрольные суммы — не го­воря уже о многом другом. Обе функции, pack и unpack, по аналогии со spnntf по­лучают форматную строку, которая определяет выполняемые с аргументом опе­рации.

Мы используем pack и unpack для интерпретации строк как последовательно­стей битов и двоичного представления целого числа. Чтобы понять, каким обра­зом строка интерпретируется как последовательность битов, необходимо хорошо разобраться в поведении функции pack. Строка интерпретируется как последо­вательность байтов, состоящих из восьми бит. Байты всегда нумеруются слева направо (первые восемь бит образуют первый байт, следующие восемь бит — вто­рой и т. д.), однако внутри каждого байта биты могут нумероваться как слева на­право, так и справа налево.

Функция pack с шаблоном "В" работает с битами каждого байта, пронумеро­ванными слева направо. Именно в этом порядке они должны находиться для при­менения формата "N", которым мы воспользуемся для интерпретации последова­тельности битов как 32-разрядного целого.




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



Книжный магазин