hexdec 是 PHP 内置的函数,用于将十六进制字符串转换成对应的十进制数字。它的使用非常简单:
int hexdec ( string $hex_string )
$hex_string 是输入的十六进制字符串,不区分大小写;
返回值是对应的十进制整数。
传感器通过通信接口(如串口、I2C、SPI等)发送数据时,为了节省传输带宽和方便解析,常用十六进制编码表示各个字节的数据内容。例如,传感器返回的温度值可能是 0x1A,对应十进制的 26。
假设我们从传感器接收到一串十六进制字符串,表示传感器的不同测量值,每两个字符代表一个字节。下面用 PHP 代码演示如何用 hexdec 解析并计算温度值。
<?php
// 模拟传感器返回的十六进制数据,两个字符一组表示一个字节
$hexData = "1A3F0B";
// 取第一个字节 '1A',转换为十进制
$tempHex = substr($hexData, 0, 2);
$tempDec = hexdec($tempHex);
echo "传感器温度值(十进制):" . $tempDec; // 输出:26
?>
在这个例子中,hexdec('1A') 返回 26,说明温度值是 26 度(具体单位根据传感器定义)。
通常传感器返回的数据包包含多个字段,例如:
2 字节温度
2 字节湿度
1 字节状态码
假设数据包是这样的一串十六进制字符串:
$packet = "00FA007D01";
解释为:
温度:00FA(十六进制)
湿度:007D(十六进制)
状态码:01
我们可以用 hexdec 结合 substr 逐个解析:
<?php
$packet = "00FA007D01";
$temperatureHex = substr($packet, 0, 4);
$humidityHex = substr($packet, 4, 4);
$statusHex = substr($packet, 8, 2);
$temperature = hexdec($temperatureHex); // 250
$humidity = hexdec($humidityHex); // 125
$status = hexdec($statusHex); // 1
echo "温度:" . $temperature . "\n";
echo "湿度:" . $humidity . "\n";
echo "状态码:" . $status . "\n";
?>
数据范围:hexdec 返回的是浮点数,如果数字过大(超过 PHP 整型范围),需要用其他方法处理,比如使用 GMP 或 BCMath 扩展。
数据格式:确保输入给 hexdec 的字符串只包含合法的十六进制字符(0-9,a-f,A-F)。
大小写无影响:hexdec 对大小写不敏感,hexdec('1A') 和 hexdec('1a') 结果相同。