bindec()
Découvrez la fonction bindec() en PHP, qui convertit un nombre binaire en nombre décimal.
La fonction bindec() convertit une chaîne de chiffres binaires (base 2) en sa valeur décimale (base 10). Elle est l'inverse de decbin(), et c'est la fonction à utiliser lorsque vous lisez des données binaires — un masque de permissions, un indicateur de bit, une valeur analysée depuis du texte — et que vous avez besoin d'un entier ordinaire pour travailler.
Syntaxe
bindec(string $binary_string): int|float$binary_string— le nombre binaire à convertir, passé sous forme de string de0et de1(par exemple"1010").- Valeur de retour — l'équivalent décimal. Il s'agit d'un
intlorsque la valeur entre dans la plage des entiers PHP, et d'unfloatpour les très grands nombres binaires qui provoqueraient sinon un dépassement.
Un exemple de base
La chaîne binaire "1010" vaut 1×8 + 0×4 + 1×2 + 0×1 = 10, donc bindec() retourne 10.
Pourquoi passer une string et non un nombre ?
Une erreur courante au départ est d'écrire bindec(1010) sans guillemets. Cela fonctionne par accident pour les petites valeurs, mais un littéral comme 0101 est interprété par PHP comme un nombre octal bien avant que bindec() ne le reçoive, et les grands littéraux binaires perdent leurs zéros de tête. Passez toujours la valeur binaire sous forme de string entre guillemets pour que les chiffres arrivent intacts :
<?php
echo bindec("00001111"); // 15 — leading zeros are fine in a string
?>Gestion des caractères invalides
bindec() ne reconnaît que 0 et 1. Tout autre caractère est silencieusement ignoré (ce qui génère un avis de dépréciation sur PHP 8.1+), et le résultat n'est donc pas celui que vous pourriez attendre :
<?php
echo bindec("1012"); // 5 — the "2" is ignored, leaving "101" = 5
echo "\n";
echo bindec(""); // 0 — an empty string is treated as zero
?>Comme la fonction échoue silencieusement, validez d'abord les entrées fournies par l'utilisateur avec preg_match('/^[01]+$/', $value) avant de convertir.
Aller-retour avec decbin()
bindec() et decbin() sont des inverses l'une de l'autre, ce qui est pratique pour inspecter ou construire des masques de bits :
<?php
$decimal = 42;
$binary = decbin($decimal); // "101010"
$back = bindec($binary); // 42
echo "$decimal -> $binary -> $back"; // 42 -> 101010 -> 42
?>Un usage pratique : lire des indicateurs de bits
Les chaînes binaires sont un moyen simple de décrire un ensemble d'options activées/désactivées. La conversion en décimal vous permet de tester des bits individuels à l'aide de l'opérateur AND bit à bit :
<?php
define('READ', bindec("100")); // 4
define('WRITE', bindec("010")); // 2
define('EXECUTE', bindec("001")); // 1
$permissions = bindec("110"); // READ + WRITE = 6
echo ($permissions & WRITE) ? "can write\n" : "cannot write\n"; // can write
echo ($permissions & EXECUTE) ? "can execute\n" : "cannot execute\n"; // cannot execute
?>Fonctions de conversion associées
| Fonction | Convertit |
|---|---|
decbin() | décimal → chaîne binaire |
hexdec() | hexadécimal → décimal |
octdec() | octal → décimal |
base_convert() | entre deux bases quelconques (2–36) |
Conclusion
bindec() transforme une chaîne binaire en nombre décimal, en retournant un int (ou un float pour les très grandes valeurs). N'oubliez pas de passer la valeur sous forme de string entre guillemets, de la valider au préalable car les caractères non binaires sont silencieusement ignorés, et d'utiliser decbin() lorsque vous devez convertir dans l'autre sens. Avec ces outils en main, vous pouvez travailler facilement avec des masques de bits, des indicateurs et toute donnée stockée en base 2.