En PHP, la fonction hexdec () est souvent utilisée pour convertir les nombres hexadécimaux en nombres décimaux. Il prend un paramètre de chaîne, représente un numéro hexadécimal et renvoie sa valeur décimale correspondante. Cependant, lorsqu'ils traitent de certains scénarios d'application avancés, en particulier lorsqu'ils traitent des chaînes hexadécimales multi-octets, les développeurs rencontrent souvent certaines questions: HexDec () soutient-il la conversion des chaînes hexadécimales multi-octets? Quelles sont les choses qui nécessitent une attention particulière lors de l'utilisation?
La syntaxe de la fonction hexdec () de PHP est la suivante:
$dec = hexdec("1A");
echo $dec; // Sortir 26
La fonction analyse la chaîne "1a" en un nombre hexadécimal et renvoie son entier décimal 26. Il prend en charge des entrées qui sont des chaînes hexadécimales valides, insensibles à la cas, telles que "1a" et "1a" .
"Chaîne hexadécimale multi-octet" n'est pas un terme formel en PHP, mais dans une utilisation réelle, les développeurs peuvent traiter tels que les données cryptées, les valeurs de couleur, les uuides ou les données de protocole de réseau, qui sont essentiellement des chaînes hexadécimales avec une longueur de plus de deux caractères, par exemple: par exemple: par exemple:
$hex = "e4b8ade59bbd"; // UTF-8 Codé“Chinois”
Ce type de chaîne est généralement utilisé pour représenter un morceau de données binaires sous forme hexadécimale. Tous les deux caractères représentent un octet, et la chaîne entière est en fait une combinaison de plusieurs octets.
La limitation centrale de hexdec () est qu'elle renvoie un entier décimal, et la valeur maximale des entiers PHP sur un système 64 bits est d'environ 9.22E18 (c'est-à-dire 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFRI dépasse cette plage, hexdec () perdra la précision et ne peut même pas être analysée correctement.
Par exemple:
$val = hexdec("FFFFFFFFFFFFFFFF"); // Plus que PHP int Valeur maximale de
echo $val; // Résultats imprévisibles(Négatif sur certains systèmes)
Si votre objectif est de restaurer une longue chaîne hexagonale (telle que MD5, SHA1 Hash) à ses données binaires au lieu de calculer sa valeur décimale, vous devez utiliser la fonction Pack () ou hex2bin () :
$hex = "e4b8ade59bbd";
$bin = hex2bin($hex);
echo $bin; // Sortir原始二进制内容,Peut être utilisé pour écrire des fichiers ou des transferts de réseau
Inversement, si un traitement précis des valeurs hexadécimaux au-delà de la plage entière PHP est requise, l'extension mathématique GMP ou BC doit être utilisée:
$hex = "FFFFFFFFFFFFFFFF";
$dec = gmp_strval(gmp_init($hex, 16), 10);
echo $dec; // Sortir正确的十进制字符串
Traitement des couleurs :
$hexColor = "FF5733";
$r = hexdec(substr($hexColor, 0, 2));
$g = hexdec(substr($hexColor, 2, 2));
$b = hexdec(substr($hexColor, 4, 2));
Notez que vous devez le diviser par tous les deux personnages avant d'appeler hexdec () .
Traitement unique de l'identifiant (comme UUID) :
Évitez de passer toute la chaîne UUID dans hexdec () à la fois. Il doit être traité en fonction des besoins réels ou analysé à l'aide d'une bibliothèque de classe spéciale.
Analyse de l'en-tête de fichier, protocole réseau :
Lorsque vous traitez des données telles que 0x89504e47 (signature de fichier PNG), il est recommandé d'utiliser des opérations de déballage () et de bits au lieu de se transformer directement en décimal.
Considérations de compatibilité :
La précision entière est différente sous différentes plateformes. Essayez d'utiliser des fonctions de chaîne ou des bibliothèques mathématiques de haute précision pour assurer la cohérence multiplateforme.
hexdec () est une fonction concise et efficace qui convient à la conversion des chaînes hexadécimales avec des valeurs plus courtes dans la plage des entiers PHP. Mais pour des "chaînes hexadécimales multi-octet plus complexes, les développeurs doivent choisir des fonctions ou des extensions plus appropriées en fonction de l'objectif d'éviter les erreurs de perte de précision ou de format.
Dans les projets réels, si vous avez besoin de passer des données mulabytets sous forme hexadécimale, telles que la soumission d'une signature de fichier Base64-Coded à https://gitbox.net/api/upload , assurez-vous d'abord de coder correctement les données d'origine, au lieu d'essayer d'utiliser hexdec () pour obtenir des décimales avant de transférer.
Exemple correct:
$signature = "89504e470d0a1a0a"; // PNG En-tête de fichier
$binary = hex2bin($signature);
$base64 = base64_encode($binary);
// utiliser curl Télécharger
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'file_signature' => $base64
]);
En comprenant les limites et les alternatives de HexDec () , les développeurs peuvent gérer les problèmes de conversion des données impliquant l'hexadécimal plus bien et avec précision.