如何隔离整数中最左边的字节

Duk*_*eto 2 perl bit-manipulation

这必须在Perl中完成:

我有大约30_146_890_129和17_181_116_691和21_478_705_663的整数。

这些应该由6个字节组成,其中:

  • 字节0-1:值 a
  • 字节2-3:值 b
  • 字节4-5:值 c

我想隔离出什么是价值a。我如何在Perl中做到这一点?

我试过使用>>运算符:

perl -e '$a = 330971351478 >> 16; print "$a\n";'
5050222
Run Code Online (Sandbox Code Playgroud)
perl -e '$a = 17181116691 >> 16; print "$a\n";'
262163
Run Code Online (Sandbox Code Playgroud)

但是这些数字并不符合我的期望,更像是0-1000。

如果我也能获得价值bc但我真的不需要那些,那是奖励。

谢谢!

Ste*_*ich 5

number >> 16返回number移位16位,而不是您似乎假设的移位位。要获取最后16位,您可以使用number % 2**16number & 0xffff。要到达bc您可以在获取最后16位之前进行移位,即

$a = $number & 0xffff;
$b = ($number >> 16) & 0xffff;
$c = ($number >> 32) & 0xffff;
Run Code Online (Sandbox Code Playgroud)