我对 Perl 相对缺乏经验,但我的问题涉及在获取数值位时的解包函数。例如:
my $bits = unpack("b*", 1);
print $bits;
这将导致打印 10001100,即十进制的 140。在相反的顺序中,它是十进制的 49。我尝试过的任何其他值似乎都给出了不正确的位。
但是,当我通过 pack 运行 $bits 时,它再次产生 1。我在这里缺少什么吗?
当我认为我的问题已经解决时,我似乎得出了结论。也许我应该简要解释一下我正在尝试做什么。
我需要将一个可能长达 24 位(关键是它可能大于一个字节)的整数值转换为位串。这可以使用@ikegami 建议的解包和打包来完成,但我还需要找到一种方法将该位字符串转换回它的原始整数(不是它的字符串表示形式)。
正如我所提到的,我对 Perl 相对缺乏经验,而且我一直在尝试但没有成功。
我发现似乎是最佳解决方案:
my $bits = sprintf("%032b", $num);
print "$bits\n";
my $orig = unpack("N", pack("B32", substr("0" x 32 . $bits, -32)));
print "$orig\n";