为什么perl的unpack()认为第二个参数是字符串?

时间:2014-12-26 04:52:39

标签: perl binary

我该如何解决?

如果我执行以下操作:

print unpack("B8", 7) . "\n";

我得到以下输出:

00110111

预期的输出当然是00000111.我已经检查了,它给了我ascii" 7",字符串。通过将7包装在chr()中,我能够很好地解决它:

print unpack("B8", chr(7)) . "\n";

当然,只有当我的输入仍然低于255时,这才会起作用,我怀疑它可能会进入低位数千位(我会让#34; B8"动态也是如此)。

我知道我是愚蠢的,但我已经阅读过这方面的文档而他们没有提到它。它的反向函数pack()似乎正确地解释了第二个参数。

1 个答案:

答案 0 :(得分:5)

unpack将一串字节解包为scalars,其值由这些字节表示。

$ perl -E'say for unpack("nB8", "\x12\x34\x56")'
4660
01010110

您正在寻找

sprintf("%08B", 7)