我有一串pack
ed值,它是使用类似的顺序创建的:
while (...) {
...
$packed .= pack( 'L', $val );
}
在另一个程序中,加载
$packed
后,我希望找出实际打包了多少个值。我知道unpack
编码后该怎么做:my @vals = unpack( 'L*', $packed );
print scalar(@vals);
但是真的有必要吗?如果我只关心值的数量,是否可以做得更好并且跳过
unpack
编码? 最佳答案
由于您知道打包值的大小(L
是无符号的32位int或4个字节),因此只需将长度除以大小即可:
my $count = length($packed) / 4;
如果您不想对大小进行硬编码,则还可以打包一个样本值以进行计算。 (请注意,Perl的编译时常量折叠不适用于
pack
,至少不适用于5.10.1,因此您只想执行一次该计算。)my $size = length(pack('L', 0));
...
my $count = length($packed) / $size;