2012-01-08 58 views
3

我有一个二进制文件,并获取我已经使用“解压”函数的内容。解压函数没有给出类似的结果

我的脚本可以同时运行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位活跃的perl编译器执行相同的,我得到不同的结果:

32位:

$ VAR1 = [ 129864071, 0, 47193587, 0, 16448777, 0, 41067198, 0,];

64位:

$ VAR1 = [ 129864071, 47193587, 16448777, 41067198, 129, 365173507, 25208052,]

造成这种差异的原因可能是什么?我怎样才能使他们相似,同时仍然使用32位无符号长和64位无符号四进制值?

+0

得到了我在这里所犯的粗心的错误--- 我应该把它作为 @data = unpack(“(LL)8”,$ binary); 然后只有我使用32位被解释为64位。 – Kallol 2012-01-08 08:24:54

+0

是的,你可以使用加括号的'(LL)8'规范。 – 2012-01-08 17:35:48

回答

6

LL8规范的意思是“解压9个无符号的32位数量”。

Q8规范意思是'解压8个无符号的64位数量'。

因为您要求不同的结果,您得到不同的结果并不奇怪。

我想你可以使用L16(或(LL)8,但最终结果是相同的),如果你想解压512位数据。