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

Joh*_*n O 2 binary perl

我该如何解决?

如果我执行以下操作:

print unpack("B8", 7) . "\n";
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

00110111
Run Code Online (Sandbox Code Playgroud)

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

print unpack("B8", chr(7)) . "\n";
Run Code Online (Sandbox Code Playgroud)

当然,只有当我的输入仍然低于255时,这才会起作用,我怀疑它可能会进入低数千(我也会使"B8"变为动态).

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

ike*_*ami 5

unpack 将一串字节解压缩到标量中,并使用这些字节表示的值.

$ perl -E'say for unpack("nB8", "\x12\x34\x56")'
4660
01010110
Run Code Online (Sandbox Code Playgroud)

您正在寻找

sprintf("%08B", 7)
Run Code Online (Sandbox Code Playgroud)