以及如何解决?

如果我执行以下操作:

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


我得到以下输出:

00110111


预期的输出当然是00000111。我已经检查过了,它给了我字符串ascii“ 7”。我可以通过将7包裹在chr()中来修复它:

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


当然,只有当我的输入保持在255以下时,这才起作用,并且我怀疑它可能会降到最低的几千(我也会使“ B8”成为动态)。

我知道我很钝,但是我已经阅读了有关此文档,但他们没有提及。它的反向函数pack()似乎正确解释了第二个参数。

最佳答案

unpack使用这些字节表示的值将字节字符串解压缩为标量。

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


您正在寻找

sprintf("%08B", 7)

关于perl - 为什么perl的unpack()认为第二个参数是字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27652947/

10-11 02:02