首页 > 解决方案 > 如何从 PHP 中的十六进制值中找到低字节和高字节?

问题描述

我有一系列十六进制值,如 0x1b12、0x241B、0x2E24、0x392E,我需要从这些十六进制值中的每一个计算低字节和高字节以进行进一步处理。我怎样才能做到这一点?我做了一些研究,发现 php 中有一个unpack函数,但是参数中的“格式”部分让我感到困惑。我看到的一些解压代码添加在下面。

unpack("C*",$data)
unpack("C*myint",$data)
unpack("c2chars/n2int",$data)

正如前面提到的代码,我不太明白 "C*","C*myint","c2chars/n2int" 在 unpack 函数中的作用。所以我不太确定我是否可以使用 unpack 作为我的问题的解决方案。非常感谢您的帮助。

提前致谢。

标签: phpphp-7php-7.2php-5.4

解决方案


您可以使用 pack 功能执行此操作。使用位运算符更容易和更快:

$val = 0x1b12;  //or $val = 6930;

$lowByte = $val & 0xff;  //int(18)
$uppByte = ($val >> 8) & 0xff;  //int(27)

该代码需要一个整数 $val 作为输入。如果“0x1b12”形式的字符串可用作输入,则必须将其转换为整数:

$stringHex = "0x1b12";  //or "1b12"
$val = hexdec(ltrim($stringHex,'0x'));

ltrim 是必需的,以便从 7.4.0 开始不会生成折旧通知。


推荐阅读