在Perl中将字节转换为位序列(二进制)

Nik*_*Nik 3 perl byte bit

在过去的几个小时里,我一直在围绕这个问题喋喋不休.这里有很多类似的问题,但没有什么相同的,我见过的技术似乎都没有用.

我有一个字节序列(整数),我从我的程序中的输入生成 - 每个字节代表BMP图像中像素的红色,绿色或蓝色值.我基本上需要提取每个字节的比特流表示; 也就是说,该字节的二进制序列.

我一直在使用许多不同的变化pack()unpack(),但我不出来有正确的结果.

例如:

sub convertToBinary {
    my $str = unpack("B32", pack("N", shift));
    return $str;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

my $str = unpack("b8", shift);,

my $str = unpack("B8", shift);,

my $str = unpack("b*", shift);

还有很多其他的变化; 他们似乎都没有工作.我不觉得提取一个字节的位模式应该太难了......只有八个'1'或'0',对吧?

我在这里错过了什么?

cjm*_*cjm 5

我想你正在寻找sprintf

sub convertToBinary {
  return sprintf '%08b', shift;
}
Run Code Online (Sandbox Code Playgroud)