Dans PHP, la fonction Bindec () est utilisée pour convertir les nombres binaires (représentés sous forme de chaînes) en nombres décimaux. Cependant, dans une utilisation réelle, vous pouvez rencontrer des erreurs ou des problèmes qui font que la fonction ne fonctionne pas comme prévu. La compréhension de ces erreurs courantes et de ces conseils de gestion peut vous aider à éviter ou à résoudre ces problèmes et à vous assurer que votre code fonctionne correctement.
La syntaxe de base de la fonction bindec () est la suivante:
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$binary_string</span></span><span>);
</span></span>
$ binary_string : il s'agit d'une chaîne contenant des numéros binaires (composé uniquement par des caractères '0' et '1').
La valeur de retour est un entier décimal.
Par exemple:
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-string">'1101'</span></span><span>); </span><span><span class="hljs-comment">// Sortir:13</span></span><span>
</span></span>
Bindec () accepte uniquement les chaînes composées de 0 et 1. Si la chaîne contient d'autres caractères (tels que des espaces, des lettres, des symboles, etc.), une erreur ou un 0 sera retournée.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-string">'110a'</span></span><span>); </span><span><span class="hljs-comment">// Sortir:0</span></span><span>
</span></span>
Assurez-vous que la chaîne passée ne contient que des numéros binaires. Si vous n'êtes pas sûr de la validité de l'entrée, vous pouvez utiliser preg_match () pour vérifier le format de chaîne.
<span><span><span class="hljs-variable">$binary_string</span></span><span> = </span><span><span class="hljs-string">'110a'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/^[01]+$/'</span></span><span>, </span><span><span class="hljs-variable">$binary_string</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-variable">$binary_string</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Chaîne binaire non valide"</span></span><span>;
}
</span></span>
Si la chaîne passée pour rejeter () est vide, la valeur de retour sera 0. Bien que ce ne soit pas une erreur, ce n'est peut-être pas le comportement que vous attendez.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>); </span><span><span class="hljs-comment">// Sortir:0</span></span><span>
</span></span>
Avant d'appeler Bindec () , vérifiez si la chaîne est vide. Si vide, une valeur par défaut peut être donnée ou un message d'erreur peut être déclenché.
<span><span><span class="hljs-variable">$binary_string</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$binary_string</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La chaîne d'entrée ne peut pas être vide"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-variable">$binary_string</span></span><span>);
}
</span></span>
Bindec () ignorera automatiquement les zéros principaux dans les chaînes binaires. Bien que cela n'affecte généralement pas les conversions, si vous souhaitez gérer avec précision les zéros de premier plan, vous pouvez les retirer à l'avance.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-string">'0000101'</span></span><span>); </span><span><span class="hljs-comment">// Sortir:5</span></span><span>
</span></span>
Vous pouvez choisir de supprimer les zéros de premier plan ou de les laisser pour le débogage ou le traitement.
<span><span><span class="hljs-variable">$binary_string</span></span><span> = </span><span><span class="hljs-string">'0000101'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-title function_ invoke__">ltrim</span></span><span>(</span><span><span class="hljs-variable">$binary_string</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>)); </span><span><span class="hljs-comment">// Sortir:5</span></span><span>
</span></span>
Lorsqu'une chaîne binaire représente de très grands nombres, Bindec () peut ne pas être géré correctement. Bien que le type entier de PHP prenne en charge les valeurs les plus courantes, le débordement ou les erreurs peuvent se produire pour des valeurs hors de la portée de la plate-forme.
<span><span><span class="hljs-variable">$large_binary</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">'1'</span></span><span>, </span><span><span class="hljs-number">65</span></span><span>); </span><span><span class="hljs-comment">// Dépasser 64 Peu</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-variable">$large_binary</span></span><span>); </span><span><span class="hljs-comment">// Peut provoquer un débordement</span></span><span>
</span></span>
Pour les chaînes binaires super-grandes, vous pouvez envisager d'utiliser les fonctions GMP_INIT () et GMP_Strval () , qui prennent en charge le traitement numérique de précision arbitraire.
<span><span><span class="hljs-variable">$large_binary</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">'1'</span></span><span>, </span><span><span class="hljs-number">65</span></span><span>);
</span><span><span class="hljs-variable">$gmp_value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">gmp_init</span></span><span>(</span><span><span class="hljs-variable">$large_binary</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">gmp_strval</span></span><span>(</span><span><span class="hljs-variable">$gmp_value</span></span><span>); </span><span><span class="hljs-comment">// Convertir correctement les grands nombres</span></span><span>
</span></span>
La fonction Bindec () ne prend pas en charge le traitement des nombres négatifs dans les représentations binaires (telles que le formulaire de complément). Si vous devez faire face à des nombres négatifs, vous devez généralement vous convertir manuellement.
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-string">'-1101'</span></span><span>); </span><span><span class="hljs-comment">// Sortir:0,Aucune reconnaissance de signe négative</span></span><span>
</span></span>
Identifiez manuellement le signe négatif et convertissez.
<span><span><span class="hljs-variable">$binary_string</span></span><span> = </span><span><span class="hljs-string">'-1101'</span></span><span>;
</span><span><span class="hljs-variable">$is_negative</span></span><span> = </span><span><span class="hljs-variable">$binary_string</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>] == </span><span><span class="hljs-string">'-'</span></span><span>;
</span><span><span class="hljs-variable">$binary_string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ltrim</span></span><span>(</span><span><span class="hljs-variable">$binary_string</span></span><span>, </span><span><span class="hljs-string">'-'</span></span><span>);
</span><span><span class="hljs-variable">$decimal</span></span><span> = </span><span><span class="hljs-title function_ invoke__">bindec</span></span><span>(</span><span><span class="hljs-variable">$binary_string</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$is_negative</span></span><span>) {
</span><span><span class="hljs-variable">$decimal</span></span><span> = -</span><span><span class="hljs-variable">$decimal</span></span><span>;
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$decimal</span></span><span>; </span><span><span class="hljs-comment">// Sortir:-13</span></span><span>
</span></span>
La fonction Bindec () est un outil très utile en PHP, mais il a également quelques limitations et problèmes potentiels communs. En assurant la validité de la chaîne d'entrée, en gérant les zéros principaux et les grandes valeurs, vous pouvez éviter les erreurs les plus courantes. Pour les nombres négatifs et les cordes binaires en format spécial, il peut devoir être traité manuellement. La maîtrise de ces techniques peut vous aider à utiliser la fonction Bindec () de PHP plus efficacement.