Kal*_*lol 3 perl perl-module perl-data-structures
我有一个二进制文件,并获得我使用"解包"功能的内容.
我的脚本可以运行32位exe或64位exe.因此我使用了以下代码:
if ( $ENV{PROCESSOR_ARCHITECTURE} eq 'x86' )
{
@data = unpack( "LL8", $binary );
}
else
{
@data = unpack( "Q8", $binary );
}
print Dumper \@data;
Run Code Online (Sandbox Code Playgroud)
但是当我使用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位无符号四元组值的同时使它们相似?
该LL8规范意味着'解包9个无符号32位数'.
该Q8规范意味着"解包8个无符号64位数量".
因为要求不同的结果,所以你得到不同的结果就不足为奇了.
如果你想解包512位数据,我想你可以使用L16(或者(LL)8,虽然净结果是相同的).