我目前正在尝试解码十六进制有效载荷以从中提取值。要转换的值为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是错误的,我似乎无法弄清楚为什么。
答案 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];