(PHP 4, PHP 5, PHP 7)
bindec — Convertit de binaire en décimal
Retourne la conversion d'un nombre binaire représenté par la chaîne
binary_string
en décimal.
bindec() convertie un nombre binaire en un entier, ou, si nécessaire (pour des raisons de taille), en nombre décimal.
bindec() interprète toutes les valeurs
binary_string
comme des valeurs non-signées entières.
Ceci est dû au fait que la fonction bindec() voit
le premier bit comme un autre ordre de grandeur plutôt que comme le
bit de signe.
binary_string
La chaîne binaire à convertir.
Ce paramètre doit être une chaîne de caractères. L'utilisation d'un autre type de données produit des résultats inattendus.
La valeur décimale de binary_string
Exemple #1 Exemple avec bindec()
<?php
echo bindec('110011') . "\n";
echo bindec('000110011') . "\n";
echo bindec('111');
?>
L'exemple ci-dessus va afficher :
51 51 7
Exemple #2 bindec() interprète l'entrée comme un entier non-signé
<?php
/*
* Le plus important dans cet exemple est dans la sortie
* plutôt que dans le code PHP lui-même.
*/
$magnitude_lower = pow(2, (PHP_INT_SIZE * 8) - 2);
p($magnitude_lower - 1);
p($magnitude_lower, 'Avez-vous vu le changement ? Soyez attentif la prochaine fois...');
p(PHP_INT_MAX, 'PHP_INT_MAX');
p(~PHP_INT_MAX, 'interprété comme étant supérieur à PHP_INT_MAX');
if (PHP_INT_SIZE == 4) {
$note = 'interprété comme étant le plus grand entier non-signé';
} else {
$note = 'interprété comme étant le plus grand entier non-signé
(18446744073709551615) mais faussé par la précision de la virgule flottante';
}
p(-1, $note);
function p($input, $note = '') {
echo "entrée : $input\n";
$format = '%0' . (PHP_INT_SIZE * 8) . 'b';
$bin = sprintf($format, $input);
echo "binaire : $bin\n";
ini_set('precision', 20); // Pour plus de lisibilité sur les PC 64 bits.
$dec = bindec($bin);
echo 'bindec() : ' . $dec . "\n";
if ($note) {
echo "Note : $note\n";
}
echo "\n";
}
?>
Résultat de l'exemple ci-dessus sur une machine 32 bits :
entrée : 1073741823 binaire : 00111111111111111111111111111111 bindec() : 1073741823 entrée : 1073741824 binaire : 01000000000000000000000000000000 bindec(): 1073741824 Note : Avez-vous vu le changement ? Soyez attentif la prochaine fois... entrée : 2147483647 binaire : 01111111111111111111111111111111 bindec(): 2147483647 Note : PHP_INT_MAX entrée : -2147483648 binaire : 10000000000000000000000000000000 bindec(): 2147483648 Note : interprété comme étant supérieur à PHP_INT_MAX entrée : -1 binaire : 11111111111111111111111111111111 bindec(): 4294967295 Note : interprété comme étant le plus grand entier non-signé
Résultat de l'exemple ci-dessus sur une machine 64 bits :
entrée : 4611686018427387903 binaire : 0011111111111111111111111111111111111111111111111111111111111111 bindec() : 4611686018427387903 entrée : 4611686018427387904 binaire : 0100000000000000000000000000000000000000000000000000000000000000 bindec() : 4611686018427387904 Note : Avez-vous vu le changement ? Soyez attentif la prochaine fois... entrée : 9223372036854775807 binaire : 0111111111111111111111111111111111111111111111111111111111111111 bindec() : 9223372036854775807 Note : PHP_INT_MAX entrée : -9223372036854775808 binaire : 1000000000000000000000000000000000000000000000000000000000000000 bindec() : 9223372036854775808 Note : interprété comme étant supérieur à PHP_INT_MAX entrée : -1 binaire : 1111111111111111111111111111111111111111111111111111111111111111 bindec() : 18446744073709551616 Note : interprété comme étant le plus grand entier non-signé (18446744073709551615) mais faussé par la précision de la virgule flottante
Note:
La fonction peut convertir des nombres qui sont trop larges pour tenir dans un type entier ; dans ce cas, ces valeurs seront retournées sous la forme de nombres à virgule flottante.