base_convert()
Découvrez la fonction base_convert() en PHP pour convertir un nombre d'une base numérique à une autre, de la base 2 à 36.
La fonction base_convert() convertit un nombre d'une base numérique à une autre — par exemple, du décimal (base 10) au binaire (base 2), ou de l'hexadécimal (base 16) vers le décimal. C'est l'outil de conversion de base le plus général de PHP, car il fonctionne avec n'importe quelle base de 2 à 36, tandis que des fonctions comme dechex() ou bindec() sont limitées à une seule paire de bases.
Cette page couvre la syntaxe, la plage de bases valides, des exemples exécutables, les pièges à éviter (sensibilité à la casse, fractions, limites de précision), et quand privilégier une fonction plus spécifique.
Syntaxe
base_convert(string $num, int $from_base, int $to_base): string| Paramètre | Description |
|---|---|
$num | Le nombre à convertir, fourni sous forme de string (un entier est également accepté et converti en string). |
$from_base | La base dans laquelle $num est actuellement écrit. Doit être comprise entre 2 et 36. |
$to_base | La base vers laquelle convertir $num. Doit être comprise entre 2 et 36. |
Valeur de retour : le nombre converti sous forme de string, toujours en minuscules. Les bases supérieures à 10 utilisent les lettres a–z pour les chiffres 10 à 35 (ainsi la base 16 utilise 0-9 et a-f, la base 36 utilise 0-9 et a-z).
Un exemple de base
L'utilisation la plus courante est la conversion d'un nombre décimal en binaire :
Le décimal 10 devient la string "1010" en binaire. Notez que le résultat est une string et non un entier — gardez cela à l'esprit si vous prévoyez d'effectuer des calculs arithmétiques ensuite.
Conversion entre bases courantes
La même fonction gère l'hexadécimal, l'octal et toute base intermédiaire. Voici plusieurs conversions côte à côte :
<?php
echo base_convert("ff", 16, 10), "\n"; // hex -> decimal: 255
echo base_convert("255", 10, 16), "\n"; // decimal -> hex: ff
echo base_convert("777", 8, 10), "\n"; // octal -> decimal: 511
echo base_convert("a37334", 16, 2), "\n";// hex -> binary
echo base_convert("zz", 36, 10), "\n"; // base 36 -> decimal: 1295
?>Ce code affiche :
255
ff
511
101000110111001100110100
1295Puisque base_convert() comprend les deux extrémités de la conversion, il n'est pas nécessaire d'enchaîner deux appels séparés pour passer, par exemple, de l'hexadécimal au binaire.
Points de vigilance
- La casse est normalisée. Les lettres en entrée peuvent être en majuscules ou en minuscules (
"FF"et"ff"fonctionnent toutes les deux), mais la sortie est toujours en minuscules. - Les fractions ne sont pas prises en charge.
base_convert()fonctionne uniquement sur des nombres entiers. Une valeur comme"12.34"aura son.traité comme un caractère invalide — il est supprimé et seuls les chiffres sont convertis (et PHP 8.1+ émet un avis de dépréciation pour les caractères ignorés). - Les chiffres invalides sont ignorés. Un caractère qui n'est pas valide dans
$from_base(par exemple un9quand$from_basevaut 8) est silencieusement supprimé plutôt que de déclencher une erreur, pensez donc à valider votre entrée au préalable. - La précision est limitée. En interne, la valeur est traitée comme un nombre à virgule flottante. Les très grands entiers peuvent perdre en précision et produire un résultat inexact. Pour une conversion de base en précision arbitraire, utilisez l'extension GMP avec
gmp_init()et une base.
Quand utiliser une fonction plus spécifique
Si vous convertissez toujours vers ou depuis la base 10, les fonctions dédiées sont plus claires et légèrement plus rapides :
dechex()/hexdec()— décimal ⇄ hexadécimaldecbin()/bindec()— décimal ⇄ binairedecoct()/octdec()— décimal ⇄ octal
Préférez base_convert() lorsqu'aucune des deux bases n'est 10 (par ex. hex → binaire) ou lorsque la base est inhabituelle, comme la base 36 (souvent utilisée pour des identifiants courts et adaptés aux URL).
Conclusion
base_convert() est l'outil PHP polyvalent pour déplacer un entier entre deux systèmes numériques quelconques, de la base 2 à la base 36. N'oubliez pas qu'il retourne une string en minuscules, ignore les fractions et les chiffres invalides, et est limité par la précision des nombres à virgule flottante pour les très grandes valeurs. Pour les conversions courantes de décimal vers X, les helpers dédiés dec*() / *dec() sont généralement le meilleur choix.