2016-08-15 24 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位)。如果你提供一个奇数的十六进制数字,那么pack会假设4个零位来填充最后一个字节。 –