unpack函数没有给出类似的结果

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位无符号四元组值的同时使它们相似?

Jon*_*ler 6

LL8规范意味着'解包9个无符号32位数'.

Q8规范意味着"解包8个无符号64位数量".

因为要求不同的结果,所以你得到不同的结果就不足为奇了.

如果你想解包512位数据,我想你可以使用L16(或者(LL)8,虽然净结果是相同的).