Position actuelle: Accueil> Derniers articles> Pourquoi ai-je toujours des résultats différents lorsque je converti une chaîne binaire avec Bindec ()?

Pourquoi ai-je toujours des résultats différents lorsque je converti une chaîne binaire avec Bindec ()?

M66 2025-06-15

Dans PHP, la fonction Bindec () est utilisée pour convertir les chaînes binaires en nombres décimaux. Il semble très simple à utiliser, mais de nombreux développeurs rencontreront des problèmes tels que les résultats de conversion incohérents et les attentes dans les opérations réelles. Cet article analysera en détail les causes de ce problème avec des exemples et fournira des solutions.

Utilisation de base de Bindec ()

La fonction Bindec () reçoit un paramètre de chaîne au format binaire et renvoie son entier décimal correspondant. Par exemple:

<code> <? php $ binary = "1101"; // String binaire $ decimal = bindec ($ binaire); écho $ décimal; // Sortie: 13?> </code>

Dans le code ci-dessus, la décimale correspondant à 1101 binaire est de 13 et la fonction renvoie correctement.

Causes courantes de résultats incohérents

1. Inclure des caractères non binaires dans la chaîne d'entrée

bindec () ne reconnaît que «0» et «1». Si la chaîne contient des espaces, des nouvelles lignes ou d'autres caractères, le résultat sera anormal.

<code> <? php $ binary = "1010 11"; // inclut l'espace Echo Bindec ($ binaire); // Le résultat de sortie ne répond pas aux attentes?> </code>

Solution: assurez-vous que la chaîne d'entrée se compose uniquement de «0» et «1» et peut être filtrée par des chaînes régulières ou.

2. Il y a des caractères cachés au début et à la fin d'une chaîne

Des chaînes binaires copiées à partir de pages Web ou d'autres sources peuvent avoir des caractères invisibles tels que des pauses de ligne \ n ou un retour de transport \ r .

<code> <? php $ binary = "101011 \ n"; Echo Bindec (TRIM ($ binaire)); // Utilisez des garnitures pour supprimer les caractères de début et d'achat d'espace pour éviter les erreurs?> </code>

3. La valeur dépasse la plage entière

Bindec () Renvoie le type entier PHP et l'entier maximum est limité (32 bits ou 64 bits) dans certains environnements. Lorsque le nombre binaire est très important, le résultat peut déborder ou être converti en nombres de points flottants, entraînant une inexactitude.

Par exemple:

<code> <? php $ binary = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

Solution:

  • Prend en charge les opérations de grand nombre à l'aide de la bibliothèque de fonctions GMP ou BCMath .

  • Par exemple, utilisez gmp_init () et gmp_strval () :

<code> <? php $ binary = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

4. Utilisation abusive des types variables

Assurez-vous que le paramètre entrant est de type de chaîne. Si un type numérique est passé, PHP se convertira automatiquement, ce qui peut perdre des zéros principaux, ce qui entraîne un résultat différent de celui prévu.

<code> <? php $ binary = 0101; // Numéro octal 5, pas de chaîne binaire Echo Bindec ($ binaire); // Résultat incorrect?> </code>

Écriture correcte:

<code> <? php $ binary = "0101"; // Form de chaîne Echo Bindec ($ binaire); // Sortie 5?> </code>

Résumer

  • Lorsque vous utilisez Bindec () , vous devez vous assurer que l'entrée est une chaîne binaire pure et n'a pas de caractères supplémentaires.

  • Pour les très grands nombres binaires, la bibliothèque GMP ou BCMATH doit être utilisée.

  • Assurez-vous que les paramètres sont des chaînes pour éviter les erreurs causées par la conversion automatique du nombre.

  • Utilisez TRIM () et les expressions régulières pour nettoyer la chaîne d'entrée pour assurer le format correct.

Après avoir compris ces détails, vous pouvez éviter le problème du "le résultat n'est pas comme prévu lors de la conversion des chaînes binaires avec Bindec () ".