Position actuelle: Accueil> Derniers articles> Comment la fonction hexdec est-elle utile lors de la lecture des données hexadécimales renvoyées par le capteur?

Comment la fonction hexdec est-elle utile lors de la lecture des données hexadécimales renvoyées par le capteur?

gitbox 2025-05-28

Quelle est la fonction hexdec?

HexDec est une fonction intégrée en PHP pour convertir les chaînes hexadécimales en nombres décimaux correspondants. Il est très simple à utiliser:

 int hexdec ( string $hex_string )
  • $ hex_string est la chaîne hexagonale d'entrée, insensible à la casse;

  • La valeur de retour est l'entier décimal correspondant.


Pourquoi les données du capteur sont-elles en hexadécimal?

Lorsque le capteur envoie des données via une interface de communication (comme le port série, I2C, SPI, etc.), afin d'économiser la bande passante de transmission et de faciliter l'analyse, le codage hexadécimal est souvent utilisé pour représenter le contenu des données de chaque octet. Par exemple, la valeur de température renvoyée par le capteur peut être 0x1a , correspondant à 26 en décimal.


Exemples de scénarios d'application de la fonction hexdec

Supposons que nous recevions une chaîne de chaînes hexadécimales du capteur, représentant différentes mesures du capteur, chaque deux caractères représentant un octet. Ce qui suit est un code PHP pour montrer comment utiliser HexDec pour analyser et calculer la valeur de température.

 <?php
// Simuler les données hexadécimales renvoyées par le capteur,Deux personnages d&#39;un groupe représentent un octet
$hexData = "1A3F0B"; 

// Prenez le premier octet '1A',Convertir en décimal
$tempHex = substr($hexData, 0, 2);
$tempDec = hexdec($tempHex);

echo "Valeur de température du capteur(Décimal):" . $tempDec;  // Sortir:26
?>

Dans cet exemple, HexDec ('1A') renvoie 26, indiquant que la valeur de température est de 26 degrés (les unités spécifiques sont définies selon le capteur).


Gérer les paquets hexadécimaux complexes

Habituellement, le paquet de données renvoyé par le capteur contient plusieurs champs, tels que:

  • Température de 2 octets

  • Humidité de 2 octets

  • Code d'état de 1 octet

Supposons que le paquet soit une chaîne hexadécimale comme ceci:

 $packet = "00FA007D01";

Expliqué comme:

  • Température: 00fa (hexadécimal)

  • Humidité: 007d (hexadécimal)

  • Code d'état: 01

Nous pouvons utiliser hexdec pour analyser un par un avec 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 "température:" . $temperature . "\n";
echo "humidité:" . $humidity . "\n";
echo "Code d&#39;état:" . $status . "\n";
?>

Choses à noter

  1. Plage de données : HexDec renvoie un numéro de point flottant. Si le nombre est trop grand (dépassant la plage entière PHP), il doit être géré avec d'autres méthodes, telles que l'utilisation de l'extension GMP ou BCMATH.

  2. Format de données : assurez-vous que la chaîne entrée à HexDec ne contient que des caractères hexagonaux légaux (0-9, af, af).

  3. Aucun effet de cas : HexDec n'est pas sensible à la casse, et les résultats de hexdec ('1a') et hexdec ('1a') sont les mêmes.