我有一个字节序列(整数),我是从程序中的输入生成的 - 每个字节代表BMP图像中像素的红色,绿色或蓝色值。我基本上需要提取每个字节的比特流表示;也就是说,该字节的二进制序列。
我一直在使用pack()
和unpack()
的许多不同变体,但我没有得到正确的结果。
例如:
sub convertToBinary {
my $str = unpack("B32", pack("N", shift));
return $str;
}
我也试过了:
my $str = unpack("b8", shift);
,
my $str = unpack("B8", shift);
,
my $str = unpack("b*", shift);
还有许多其他变化;他们似乎都没有工作。我不觉得提取一个字节的位模式应该太难了......只有八个'1'或'0',对吧?
我在这里缺少什么?
答案 0 :(得分:5)
我认为你正在寻找sprintf
sub convertToBinary {
return sprintf '%08b', shift;
}
答案 1 :(得分:3)
基于注释,您实际上想要检查是否设置了字节的最低有效位。
解决方案取决于你的字节意思。
如果你有一个8位字符:
if (ord("\xAC") & 0x01)
如果您有一个8位数字:
if (0xAC & 0x01)
原始答案:
听起来你想要一个字节的二进制表示。解决方案取决于你的字节意思。
如果你有一个8位字符:
unpack('B8', "\xAC")
sprintf('%08b', ord("\xAC"))
sprintf('%08b', unpack('C', "\xAC"))
如果您有一个8位数字:
sprintf('%08b', 0xAC)
unpack('B8', chr(0xAC))
unpack('B8', pack('C', 0xAC))
以上所有内容都会产生字符串10101100
。