En PHP, la fonction Bindec est une fonction commune utilisée pour convertir les chaînes binaires en valeurs décimales. Son utilisation de base est très simple:
<?php
$binaryString = "1010";
$decimal = bindec($binaryString);
echo $decimal; // Sortir 10
?>
Cependant, nous voyons parfois des chaînes numériques binaires préfixées avec "0b" comme "0b1010" . Alors, que se passera-t-il lorsque la fonction Bindec rencontrera une telle chaîne préfixée? Cet article analysera cela en détail.
Selon la documentation officielle, la fonction Bindec analyse tous les bits binaires ('0' ou '1') de gauche à droite dans la chaîne jusqu'à ce que le premier caractère non binaire soit rencontré, puis convertit la partie de lecture en un entier décimal.
En bref, Bindec se concentre uniquement sur les caractères binaires valides dans la chaîne, d'autres caractères entraîneront la fin de l'analyse tôt.
Nous pouvons le vérifier via l'exemple de code:
<?php
echo bindec("1010") . "\n"; // Sortir 10
echo bindec("0b1010") . "\n"; // Sortir 0
echo bindec("b1010") . "\n"; // Sortir 0
echo bindec("01010") . "\n"; // Sortir 10
?>
D'après les résultats, vous pouvez voir:
"1010" est résolu normalement à 10.
"0b1010" renvoie 0 parce que la fonction rencontre le premier caractère '0' pendant l'analyse, qui est un binaire légal, puis le caractère 'B' n'est pas un numéro binaire légal, provoquant l'arrêt de l'analyse, et seul '0' est analysé, c'est-à-dire 0 en décimal.
"B1010" renvoie 0 directement, car le premier caractère «B» n'est pas un numéro binaire et l'analyse échoue.
"01010" est une chaîne binaire valide avec le résultat de 10.
Cela montre que BindEC ne prend pas en charge les chaînes binaires avec le préfixe "0b" , il ne fait que l'analyse des pièces binaires valides dans le préfixe et terminera l'analyse si des caractères non binaires sont rencontrés.
Si vous devez analyser une chaîne binaire avec le préfixe "0b" , vous pouvez d'abord supprimer ce préfixe, puis appeler Bindec .
Exemple de code:
<?php
function bindec_with_prefix(string $binaryStr): int {
// Si la chaîne est '0b' ou '0B' début,Supprimer les préfixes
if (stripos($binaryStr, '0b') === 0) {
$binaryStr = substr($binaryStr, 2);
}
return bindec($binaryStr);
}
echo bindec_with_prefix("0b1010"); // Sortir 10
echo "\n";
echo bindec_with_prefix("1010"); // Sortir 10
?>
Après ce traitement, il peut être correctement converti en un numéro décimal, que la chaîne soit préfixée avec "0b" .
La fonction Bindec dans PHP accepte uniquement les chaînes binaires pures (composées de «0» et «1»), et arrêtera d'analyser lors de la rencontre des caractères non binaires.
Préfixé avec un "0b" dans la chaîne binaire entraînera RindEC un résultat d'erreur (généralement 0) car il s'arrête au caractère 'B' .
Si vous souhaitez analyser une chaîne avec le préfixe "0b" , vous devez d'abord supprimer le préfixe puis appeler Bindec .
Comprendre ce point évitera de passer directement les chaînes avec le préfixe "0b" , ce qui peut éviter de nombreuses erreurs inutiles et du temps de débogage.