在添加十六进制值时,将一组位乘以256有什么用?

时间:2019-06-20 09:20:57

标签: php hex bit-shift

我目前正在尝试解码十六进制有效载荷以从中提取值。要转换的值为0x7608。但是,我没有得到应为16位整数的所需结果。使用的编程语言是PHP。

$hex="7608";
$left_part="76";
$right_part="08";

$left_part_to_decimal= hexdec($left_part);
$right_part_to_decimal=hexdec($right_part);

$result=(left_part_to_decimal<<8)|($right_part_to_decimal);

实际结果是30216。但是我提供了一段代码,因此结果的计算应如下:

$result=($left_part_to_decimal & 0xFF) + ($right_part_to_decimal & 0xFF) * 256;

这将导致预期结果为2166。

30216是错误的,我似乎无法弄清楚为什么。

1 个答案:

答案 0 :(得分:0)

如果您期望从0x7608开始2166,则将字节交换。 “ 08”是高字节,“ 76”是低字节。

$hex="7608";
$bitStr = hex2bin($hex);  //same as "\x76\x08"

$integer = ord($bitStr[1]) * 256 +  ord($bitStr[0]); //2166

解压缩功能具有16位的两种变体。您也可以这样做:

$integer = unpack('v', $bitStr)[1];