php - 添加十六进制值时,将一组位乘以 256 有什么用?
问题描述
我目前正在尝试解码十六进制有效负载以从中提取值。要转换的值是 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 是错误的,我似乎无法弄清楚为什么。
解决方案
如果您期望 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];
推荐阅读
- font-awesome - 如何将 Font Awesome 与 Polymer LitElement 一起使用
- mysql - Hive 创建表失败
- c++ - while 循环中的 ofstream outputfile() 通常会生成空文件
- git - 查找(部分)文件何时在 git 中移动
- java - Java 代码没有 println 就无法工作
- android - 如何通过 gradle 从私人 gitlab 存储库下载 aar 文件
- javascript - 如何在附加的东西上调用函数
- c - 在命令行程序中将选项与非选项参数分开
- jquery - 如何使用 jQuery 插件样板调用带有选项的公共方法?
- python - 生成 JWT json Web 令牌并发布时出现 401 错误