Архив документации OpenNet.ru / Раздел "Perl" / Индекс

Работа с двоичными числами

> Hужно записать в файл шестнад. числа, т.е. записывая \x41 - все ОК, но если мне
> нужное число я вычисляю, то как его потом записать как шестнад. число?

Перво-наперво надо навести порядок в понятиях. Шестнадцатеричных чисел не существует, существует шестнадцатеричное представление чисел. Так шестнадцатеричное представление числа "десять" есть A, двоичное представление числа "десять" - 1010 и т.д. Скалярные переменные в Перл могут хранить как числа так и их строковые представления (они также могут хранить и другие значения, например "числа с плавающей точкой", но нас они пока не интересуют). Преобразования между числами и их строкыми представлениями в десятичной системе в Перл прозрачны, т.е. выполняются автоматически, остальные варианты преобразований необходимо осуществлять явно. Например:

$x_dec = 10;   # Переменная $x_dec содержит число "десять"
$x_10 = "10";  # Переменная $x_10 содержит строку с десятичным
	       # представлением числа "десять"
	       
В данном случае эти переменные практически идентичны. Т.е.
print $x_dec;
print $x_10;
	       

напечатают строку "10" (число из $x_dec будет преобразовано в десятичное представление автоматически). А

$y = $x_dec + 1;
$z = $x_10 + 1;

запишут в переменные $y и $z число "одиннадцать" поскольку строка из $x_10 будет автоматически преобразована в число из его десятичного представления. Остальные часто используемые преобразования:

$a_hex = sprintf('%X', 10);    # Число в строку с его шестнадцатеричным
			       # представлением
			       
$a_hex = sprintf('%X', "10");  # строку с десятичным представлением можно
			       # точно так же преобразовать в строку с
			       # десятичным...
			       			       
$a = 0xA;                      # Шестнадцатеричные представления чисел можно
			       # использовать в константах. В $a будет
			       # число "десять"
			       			       
$a = hex("A");		       # Строку с шестнадцатеричным
			       # представлением числа - в число
			       

А судя по приведенному Вами примеру, Вам нужно записать в файл байт (октет) со значением XX, где XX задан в виде строки с его шестнадцатеричным представлением.

$x = "7F";
$code = hex($x);
print FILE ord($code);

Если значение задано в виде числа или его десятичном представлении, достаточно просто:

print FILE ord($x);

by Andrey Sapozhnikov from fido7.ru.perl


Архив документации на OpenNet.ru