W3docs

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 sont 0-9 et a-f (insensible à la casse, donc FF et ff sont équivalents).
  • Valeur de retour — la valeur décimale sous forme d'int, ou un float lorsque le nombre est trop grand pour tenir dans un entier PHP.

Un Exemple Simple

php— editable, runs on the server

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 :

FonctionConvertit depuisConvertit vers
hexdec()hexadécimaldécimal
dechex()décimalhexadécimal
bindec()binairedécimal
octdec()octaldé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.

Pratique

Pratique
Que fait la fonction PHP hexdec ?
Que fait la fonction PHP hexdec ?
Was this page helpful?