我有一个二进制文件,并获取我使用“解压缩”功能的内容。
我的脚本可以运行32位exe或64位exe。因此我使用了以下代码:
if ( $ENV{PROCESSOR_ARCHITECTURE} eq 'x86' )
{
@data = unpack( "LL8", $binary );
}
else
{
@data = unpack( "Q8", $binary );
}
print Dumper \@data;
但是当我使用32位Active perl和64位Active perl编译器执行相同操作时,我得到的结果不同:
32位:
$ VAR1 = [ 129864071, 0, 47193587, 0, 16448777, 0, 41067198, 0, 129 ];
64位:
$ VAR1 = [ 129864071, 47193587, 16448777, 41067198, 129, 365173507, 25208052, 152155982 ]
造成这种差异的原因是什么?如何在仍然使用32位无符号长整数和64位无符号四元组值时使它们相似?
答案 0 :(得分:6)
LL8
规范意味着'解包9个无符号32位数'。
Q8
规范意味着'解包8个无符号64位数'。
因为要求不同的结果,所以你得到不同的结果就不足为奇了。
如果您想要解包512位数据,我想您可以使用L16
(或(LL)8
,但最终结果相同)。