我想验证包装的作用。我有以下代码试一试。
$bits = pack 'N','134744072';
如何打印位?
我做了以下事情:
printf ("bits = %032b \n", $bits);
但它不起作用。
谢谢!
答案 0 :(得分:3)
如果您想要数字的二进制表示,请使用
my $num = 134744072;
printf("bits = %032b\n", $num);
如果您想要字节字符串的二进制表示,请使用
my $bytes = pack('N', 134744072);
printf("bits = %s\n", unpack('B*', $bytes));
答案 1 :(得分:1)
Devel::Peek模块(Perl附带)允许您检查Perl的变量表示。当你处理二进制数据而不是可打印的字符串时,这可能比仅仅print
更有用。
#!/usr/bin/perl
use strict;
use warnings;
use Devel::Peek qw(Dump);
my $bits = pack 'N','134744072';
Dump($bits);
产生如下输出:
SV = PV(0xaedb20) at 0xb15650
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0xb06630 "\10\10\10\10"\0
CUR = 4
LEN = 10
开头的'SV'表示这是'标量值'的转储(而不是数组或哈希值)。
'SV = PV'表示此标量包含一串字节(而不是整数或浮点值)。
'PV = 0xb06630'是指向这些字节所在位置的指针。
“\ 10 \ 10 \ 10 \ 10”\ 0可能是您感兴趣的位。双引号字符串表示构成此字符串内容的字节数。
在字符串内部,您通常会将字节解释为它们是ASCII,因此字节65十进制将显示为“A”。所有不可打印的字符都以八进制显示,前面有\
。
所以你的$bits
变量包含4个字节,每个八进制'10'是十六进制0x08。
LEN和CUR告诉你,Perl分配了10个字节的存储空间,目前正在使用4个存储空间(因此length($bits)
将返回4)。