Perl中的默认整数长度?

时间:2013-11-25 14:22:18

标签: perl

我正在阅读一些用Perl编写的脚本,我不明白。我之前从未使用过Perl。我读过有关标量的内容,这让我很困惑。有关此代码的示例:

my $sim_packets = 5;
my $sim_length = $payload_length * 2 * $sim_packets;
push @data, (1...$sim_length * 10);
my $data_32bit = 0;

如果我在此之后使用:

$data_32bit = shift @data;

$data_32bit的长度是多少?

我问这个是因为我在这段代码中有另一个数组:@payload,这一行让我困惑:

push @payload, ($data_32bit >> 24) & 0xff, 
               ($data_32bit >> 16) & 0xff, 
               ($data_32bit >> 8)  & 0xff, 
               ($data_32bit)       & 0xff;

$data_32bit是32位长吗?

2 个答案:

答案 0 :(得分:3)

哦,小伙子,

 push @payload, ($data_32bit >> 24) & 0xff, ($data_32bit >> 16) & 0xff, ($data_32bit >> 8) & 0xff, ($data_32bit) & 0xff;

有人显然需要

perldoc -f pack
perldoc -f unpack

关于您的问题,$data_32bit不是32位长,只是因为32bit这个词出现在其名称中。如果您需要知道它的具体表现方式,您应该选择Data::Dumper

Perl将整数存储在本机浮点数的尾数中,因此它实际上取决于机器架构。对于IEEE,它应该是53位。

答案 1 :(得分:2)

  

如果我理解正确的第三行代码创建数组:1..50?

它添加到数组而不是创建数组。

添加的标量包含以1开头的数字,最后包括$payload_length * 2 * $sim_packets * 10$payload_length * 100

$payload_length不太可能是1/2,所以我怀疑添加的标量数量超过你提到的数量。


  

$ data_32bit的长度是多少?

这甚至意味着什么?

我的一个系统上24个字节的标量大小。

$ perl -MDevel::Size=total_size -E'$i=123; say total_size $i'
24

存储值所需的位数:

ceil(log($payload_length * 100) / log(2))

在这种情况下,作者似乎指示值将/应该适合32位。除非$payload_length超过大于40,000,000的某个数字,否则就是这种情况。


  

这条线让我困惑:

它为数组添加了四个值。这四个值对应于$data_32bit的字节,当存储为无符号二进制补码数时,首先是最高有效字节。