hexdec()
Découvrez la fonction hexdec() en PHP, utilisée pour convertir un nombre hexadécimal en son équivalent décimal.
La fonction PHP hexdec() convertit une chaîne hexadécimale (base 16) en son équivalent décimal (base 10). C'est l'inverse de dechex(), et elle est très utile lorsque vous lisez des valeurs hexadécimales provenant de couleurs, de dumps d'octets, de hachages ou de protocoles bas niveau et que vous devez effectuer des opérations arithmétiques dessus.
Cette page couvre la syntaxe, le type de retour réel, la gestion des caractères invalides par hexdec(), le problème des grands nombres, ainsi que sa relation avec les autres fonctions de conversion de base.
Syntaxe
hexdec(string $hex_string): int|float$hex_string— la chaîne hexadécimale à convertir. Les chiffres hexadécimaux sont0-9eta-f(insensible à la casse, doncFFetffsont équivalents).- Valeur de retour — la valeur décimale sous forme d'
int, ou unfloatlorsque le nombre est trop grand pour tenir dans un entier PHP.
Un Exemple Simple
1a en base 16 signifie 1 × 16 + 10 = 26, ce qui est la valeur affichée. L'entrée est ici une chaîne — c'est la manière normale et recommandée de passer des valeurs hexadécimales, car un littéral comme 1a n'est pas du PHP valide et 0x1a serait déjà un entier.
Conversion de Plusieurs Valeurs
hexdec() est insensible à la casse et ignore tout préfixe 0x que vous pourriez copier depuis un autre outil :
<?php
echo hexdec("ff"), "\n"; // 255
echo hexdec("FF"), "\n"; // 255 (same — case does not matter)
echo hexdec("100"), "\n"; // 256
echo hexdec("7fff"), "\n"; // 32767
echo hexdec("0x1A"), "\n"; // 26 (the "0x" is ignored)
?>Un usage courant dans le monde réel consiste à décomposer une couleur CSS hexadécimale en ses canaux rouge, vert et bleu :
<?php
$color = "ff8800";
$red = hexdec(substr($color, 0, 2)); // 255
$green = hexdec(substr($color, 2, 2)); // 136
$blue = hexdec(substr($color, 4, 2)); // 0
echo "rgb($red, $green, $blue)"; // rgb(255, 136, 0)
?>Gestion des Caractères Invalides
hexdec() ne génère pas d'erreur sur une chaîne malformée. Au lieu de cela, tout caractère qui n'est pas un chiffre hexadécimal valide est silencieusement ignoré (et, depuis PHP 7.4, un avis de dépréciation/E_WARNING est émis). Les chiffres valides restants sont tout de même convertis :
<?php
echo hexdec("a0.5"), "\n"; // 2565 — the "." is dropped, so "a05" is converted
echo hexdec("xyz1f"), "\n"; // 31 — only "1f" is valid hex
?>Comme l'échec est silencieux, validez vous-même les entrées lorsqu'elles peuvent être non fiables. ctype_xdigit() vérifie qu'une chaîne ne contient que des chiffres hexadécimaux :
<?php
$input = "a0.5";
if (ctype_xdigit($input)) {
echo hexdec($input);
} else {
echo "Not a valid hexadecimal string";
}
// Not a valid hexadecimal string
?>Les Grands Nombres Retournent un Float
Les entiers PHP sont limités par la plateforme (64 bits sur la plupart des systèmes modernes). Lorsqu'une valeur hexadécimale dépasse PHP_INT_MAX, hexdec() retourne un float plutôt qu'un int pour que la valeur ne soit pas tronquée — bien que les très grands flottants perdent en précision :
<?php
var_dump(hexdec("1a")); // int(26)
var_dump(hexdec("ffffffffffffffff")); // float(1.8446744073709552E+19)
?>Si vous avez besoin d'une arithmétique exacte sur de très grands nombres hexadécimaux, utilisez plutôt les extensions BCMath ou GMP.
Fonctions de Conversion de Base Associées
hexdec() fait partie d'une famille de convertisseurs de base. Choisissez celle qui correspond à vos bases d'entrée et de sortie :
| Fonction | Convertit depuis | Convertit vers |
|---|---|---|
hexdec() | hexadécimal | décimal |
dechex() | décimal | hexadécimal |
bindec() | binaire | décimal |
octdec() | octal | décimal |
Pour des bases arbitraires (de la base 2 à la base 36), utilisez base_convert(), et pour convertir une chaîne hexadécimale en octets bruts, utilisez hex2bin().
Conclusion
hexdec() transforme une chaîne hexadécimale en nombre décimal, retournant un int (ou un float pour les très grandes valeurs). Souvenez-vous qu'elle ignore silencieusement les caractères invalides — validez donc les entrées non fiables avec ctype_xdigit() au préalable — et utilisez son équivalent inverse dechex() pour reconvertir.