我喜欢验证包的作用。我有以下代码可以尝试一下。
$bits = pack 'N','134744072';
如何打印位?
我做了以下工作:
printf ("bits = %032b n", $bits);
但它不起作用。
谢谢!!
如果你想要一个数字的二进制表示形式,请使用
my $num = 134744072;
printf("bits = %032bn", $num);
如果需要字节字符串的二进制表示形式,请使用
my $bytes = pack('N', 134744072);
printf("bits = %sn", unpack('B*', $bytes));
Devel::P eek 模块(随 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 "10101010"
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 个(。