2016-12-06 8 views

答えて

3

方法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 
+0

あなたは 'COREを使用する必要はありません::言います'-e'の代わりに' -E'コマンドラインスイッチを使うと ' –

+3

'-E'はフォワード互換ではありません。すべての機能を有効にするので、 '-E'で現在実行されているコードは、Perlのそれ以降のバージョンでは動作しない可能性があります。 – ikegami

関連する問題