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,af,AF)。
大小寫無影響: hexdec對大小寫不敏感, hexdec('1A')和hexdec('1a')結果相同。