當前位置: 首頁> 最新文章列表> 利用hexdec 讀取傳感器數據中的十六進制數值

利用hexdec 讀取傳感器數據中的十六進制數值

gitbox 2025-05-28

什麼是hexdec 函數?

hexdec是PHP 內置的函數,用於將十六進製字符串轉換成對應的十進制數字。它的使用非常簡單:

 int hexdec ( string $hex_string )
  • $hex_string是輸入的十六進製字符串,不區分大小寫;

  • 返回值是對應的十進制整數。


傳感器數據為什麼是十六進制?

傳感器通過通信接口(如串口、I2C、SPI等)發送數據時,為了節省傳輸帶寬和方便解析,常用十六進制編碼表示各個字節的數據內容。例如,傳感器返回的溫度值可能是0x1A ,對應十進制的26。


hexdec 函數應用場景舉例

假設我們從傳感器接收到一串十六進製字符串,表示傳感器的不同測量值,每兩個字符代表一個字節。下面用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";
?>

注意事項

  1. 數據范圍hexdec返回的是浮點數,如果數字過大(超過PHP 整型範圍),需要用其他方法處理,比如使用GMP 或BCMath 擴展。

  2. 數據格式:確保輸入給hexdec的字符串只包含合法的十六進製字符(0-9,af,AF)。

  3. 大小寫無影響hexdec對大小寫不敏感, hexdec('1A')hexdec('1a')結果相同。