我对Perl相对缺乏经验,但我的问题是在获取数值的位时解压缩函数.例如:
my $bits = unpack("b*", 1);
print $bits;
Run Code Online (Sandbox Code Playgroud)
这导致打印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";
Run Code Online (Sandbox Code Playgroud)