我有一串packed值,这些值是使用以下内容顺序创建的:
while (...) {
...
$packed .= pack( 'L', $val );
}
Run Code Online (Sandbox Code Playgroud)
在另一个程序中,我加载后$packed,我想知道实际打包了多少个值.我知道如何做到这一点unpack:
my @vals = unpack( 'L*', $packed );
print scalar(@vals);
Run Code Online (Sandbox Code Playgroud)
但这真的有必要吗?如果我只关心值的数量,我可以做得更好并跳过unpacking吗?
由于您知道打包值的大小(L是无符号的32位int或4个字节),只需将长度除以大小:
my $count = length($packed) / 4;
Run Code Online (Sandbox Code Playgroud)
如果您不想硬编码大小,您还可以打包一个样本值来计算它.(请注意,Perl的编译时常量折叠不起作用pack,至少不适用于5.10.1,因此您只想进行一次计算.)
my $size = length(pack('L', 0));
...
my $count = length($packed) / $size;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
224 次 |
| 最近记录: |