私のコードでは、データの一部にビッグエンディアンシステムの32ビット変数が実際に含まれている16ビット値の配列からデータを読み込んでいます。だから私は次のようなことをします:
$value = $data[$i] << 16 | $data[$i+1];
これは32ビットシステムでうまく動作しますが、64ビットシステムで実行されている場合、これは正の数(32ビット数の2の補数)として解釈されます。 もちろん、最高のビットが設定されているかどうかを手動でチェックして減算することはできますが、特に32ビットと64ビットの両方のシステムで動作するようにしたいので、ややこしいです。 これを行う簡単で良い方法がありますか?
回答:
回答№1は5my @data = (0x12, 0x3456);
my $i = 0;
my $value = unpack("l>", pack("n2", @data[$i, $i+1]));
これは、アレイ全体を一度に処理できるという利点があります。
my @values = unpack("l>*", pack("n*", @data));