私はバイナリファイルを持っており、内容を取得するために "unpack"関数を使用しています。unpack関数が類似の結果を出さない
私のスクリプトは、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のコンパイラを使用して同じことを実行していたとき、私は取得しています異なる結果:
32bit版:
$ VAR1 = [ 129864071、 0、 47193587、 0、 16448777、 0、 41067198、 0,];
64ビット:
$ VAR1 = [ 129864071、 47193587、 16448777、 41067198、 129、 365173507、 25208052、]
この違いの原因は何でしょうか? 32ビットの符号なしロングと64ビットの符号なしクォード値を使用しながら、それらを似たようにするにはどうすればよいですか?
私がここで作った不注意な間違いを見つけました--- @data = unpack( "(LL)8"、$ binary); それから私は32ビットを使って64ビットと解釈します。 – Kallol
はい、カッコで囲まれた '(LL)8 '指定を使用できます。 –