如何从包功能打印结果?

时间:2018-06-08 21:13:52

标签: perl

我想验证包装的作用。我有以下代码试一试。

$bits = pack 'N','134744072';

如何打印位?

我做了以下事情:

printf ("bits = %032b \n", $bits);  

但它不起作用。

谢谢!

2 个答案:

答案 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)。