2016-08-15 2 views
1

я побежал следующий кодсмог PERL пакет для работы в этом случае

$a=pack("H1H3", "1","abc"); 
$b=unpack("B*", $a); 
print "Got $b \n"; 

C:\Users\a0875499\Documents>perl abc.pl 
Got 000100001010101111000000 

выход выглядит неправильно для меня. Существует дополнительный «0000», который не должен присутствовать. Я ищу вывод для «0001101010111100». Вы знаете, что мне не хватает?

ответ

1

Формат 'H' для pack() собирает байты, поэтому, если вы задаете нечетное число значений, он вычитает последний байт с нулевым nybble.

Если я правильно понимаю, что вы хотите достичь, вы можете сделать это с:

$a = pack("H4", "1abc"); 

или

$a = pack("H*", "1abc"); 
+0

Thnx Гранта, но мне не нужно всегда иметь четное число байтов, право ? В таких случаях это означает, что мне нужно добавить дополнительный байт? –

+0

Вам не нужно указывать четное количество байтов - не требуется заполнение нечетного числа байтов. Каждая шестнадцатеричная цифра (или «nybble») составляет половину байта (4 бит) отформатированного вывода. Если вы укажете нечетное число шестнадцатеричных цифр, тогда пакет будет принимать 4 нуля бита для заполнения последнего байта. –

Смежные вопросы