我正在阅读一些用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位长吗?
答案 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
的字节,当存储为无符号二进制补码数时,首先是最高有效字节。