私には、という符号なしのPerlを使用してデータを送信できるデバイスがあります。2つの符号なし16ビット整数をPerlの符号付き32ビット整数に変換する方法
私は2つのレジスタを取って、の符号付きの整数を32ビットにする必要があります。
私の挑戦は、2つのポジティブを持つ負の値を表すことです。
私には、という符号なしのPerlを使用してデータを送信できるデバイスがあります。2つの符号なし16ビット整数をPerlの符号付き32ビット整数に変換する方法
私は2つのレジスタを取って、の符号付きの整数を32ビットにする必要があります。
私の挑戦は、2つのポジティブを持つ負の値を表すことです。
方法1:
my $int32 = unpack('l>', pack('nn', $hi16, $lo16));
方法2:
my $int32 = ($hi16 << 16) | $lo16;
$int32 -= 2**32 if $int32 >= 2**31;
例えば、
$ perl -e'
use feature qw(say);
my $hi16 = 0xFFFF;
my $lo16 = 0xFFFD;
say $hi16;
say $lo16;
{
my $int32 = unpack("l>", pack("nn", $hi16, $lo16));
say $int32;
}
{
my $int32 = ($hi16 << 16) | $lo16;
$int32 -= 2**32 if $int32 >= 2**31;
say $int32;
}
'
65535
65533
-3
-3
あなたは 'COREを使用する必要はありません::言います'-e'の代わりに' -E'コマンドラインスイッチを使うと ' –
'-E'はフォワード互換ではありません。すべての機能を有効にするので、 '-E'で現在実行されているコードは、Perlのそれ以降のバージョンでは動作しない可能性があります。 – ikegami
使用パック/アンパック – ysth