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

时间:2012-01-08 07:46:55

标签: 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;  

但是当我使用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位无符号四元组值时使它们相似?

1 个答案:

答案 0 :(得分:6)

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

Q8规范意味着'解包8个无符号64位数'。

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

如果您想要解包512位数据,我想您可以使用L16(或(LL)8,但最终结果相同)。