現在の位置: ホーム> 最新記事一覧> センサーによって返された16進データを読み取るとき、HexDec機能はどのように役立ちますか?

センサーによって返された16進データを読み取るとき、HexDec機能はどのように役立ちますか?

gitbox 2025-05-28

HexDec機能とは何ですか?

HexDecは、PHPの組み込み関数であり、16進数文字列を対応する10進数に変換します。使用は非常に簡単です:

 int hexdec ( string $hex_string )
  • $ hex_stringは、入力hex文字列であり、ケース非感受性です。

  • 返品値は、対応する小数整数です。


センサーデータが16進数であるのはなぜですか?

センサーが通信インターフェイス(シリアルポート、I2C、SPIなどなど)を介してデータを送信する場合、伝送帯域幅を保存して分析を促進するために、各バイトのデータコンテンツを表すために16進エンコードが使用されます。たとえば、センサーによって返される温度値は0x1aであり、小数点の26に対応している場合があります。


HexDec関数アプリケーションシナリオの例

センサーから一連の16進列をセンサーから受け取るとし、センサーの異なる測定値を表し、2つの文字が1つのバイトを表しています。以下は、 HexDecを使用して温度値を解析して計算する方法を示すPHPコードです。

 <?php
// センサーによって返される16進数データをシミュレートします,グループ内の2文字はバイトを表します
$hexData = "1A3F0B"; 

// 最初のバイトを取ります '1A',小数に変換します
$tempHex = substr($hexData, 0, 2);
$tempDec = hexdec($tempHex);

echo "センサー温度値(小数):" . $tempDec;  // 出力:26
?>

この例では、 HexDec( '1a')が26を返し、温度値が26度であることを示します(特定の単位はセンサーに従って定義されています)。


複雑な16進パケットを処理します

通常、センサーによって返されるデータパケットには、次のような複数のフィールドが含まれています。

  • 2バイト温度

  • 2バイトの湿度

  • 1バイトステータスコード

パケットが次のような16進の文字列であると仮定します。

 $packet = "00FA007D01";

説明:

  • 温度: 00FA (16進数)

  • 湿度: 007d (16進数)

  • ステータスコード: 01

HexDecを使用して、副帯で1つずつ分析できます。

 <?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に入力された文字列には、法的16進体のみ(0-9、AF、AF)のみが含まれていることを確認してください。

  3. 症例効果はありませんHexDecは症例に敏感ではなく、 HexDec( '1a')Hexdec( '1a')の結果は同じです。