In PHP wird die BindEc () -Funktion verwendet, um binäre Zeichenfolgen in Dezimalzahlen umzuwandeln. Es scheint sehr einfach zu verwenden, aber viele Entwickler werden auf Probleme stoßen, wie z. B. inkonsistente Konversionsergebnisse und Erwartungen in den tatsächlichen Operationen. Dieser Artikel wird die Ursachen dieses Problems im Detail mit Beispielen analysieren und Lösungen bereitstellen.
Die Funktion BindEc () empfängt einen String -Parameter im Binärformat und gibt ihre entsprechende Dezimalzahlung zurück. Zum Beispiel:
<code> <? php $ binary = "1101"; // Binary String $ decimal = Binesec ($ Binary); echo $ decimal; // Ausgabe: 13?> </Code>Im obigen Code beträgt die Dezimalzahl, die 1101 -Binärdatum entspricht, 13 , und die Funktion kehrt korrekt zurück.
Binesec () erkennt nur '0' und '1'. Wenn die Zeichenfolge Leerzeichen, Neulinge oder andere Zeichen enthält, ist das Ergebnis abnormal.
<code> <? php $ binary = "1010 11"; // Space Echo Binec ($ Binary) einschließen; // Das Ausgabeergebnis entspricht nicht den Erwartungen?> </Code>Lösung: Stellen Sie sicher, dass die Eingangszeichenfolge nur aus '0' und '1' besteht und von regulär oder saiten gefiltert werden kann.
Binäre Zeichenfolgen, die von Webseiten oder anderen Quellen kopiert wurden, können unsichtbare Zeichen wie Linienbrüche \ n oder Wagenrückgabe \ r haben.
<code> <? php $ binary = "101011 \ n"; Echo Binesec (Trim ($ Binary)); // Verwenden Sie Trim, um die Anfänger- und Beendigung von Whitespace -Zeichen zu entfernen, um Fehler zu vermeiden?> </Code>Binec () gibt den PHP-Ganzzahl Typ zurück, und die maximale Ganzzahl ist in einigen Umgebungen begrenzt (32-Bit oder 64-Bit). Wenn die Binärzahl sehr groß ist, kann das Ergebnis überlaufen oder in schwimmende Punktzahlen umgewandelt werden, was zu Ungenauigkeit führt.
Zum Beispiel:
<code> <? php $ binary = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111Lösung:
Unterstützt große Zahlenvorgänge mit der GMP- oder BCMATH -Funktionsbibliothek.
Verwenden Sie beispielsweise gmp_init () und gmp_strval () :
Stellen Sie sicher, dass der eingehende Parameter vom Typ Zeichenstreich ist. Wenn ein numerischer Typ übergeben wird, konvertiert PHP automatisch, was möglicherweise führende Nullen verliert, was zu einem anderen Ergebnis führt als erwartet.
<code> <? php $ binary = 0101; // Oktal Nummer 5, nicht binär String echo Binese ($ Binary); // Falsches Ergebnis?> </Code>Richtiges Schreiben:
<code> <? php $ binary = "0101"; // String Form Echo Binesec ($ Binary); // Ausgabe 5?> </Code>Wenn Sie Binec () verwenden, müssen Sie sicherstellen, dass die Eingabe eine reine binäre Zeichenfolge ist und keine zusätzlichen Zeichen hat.
Für sehr große Binärzahlen sollte die GMP- oder BCMATH -Bibliothek verwendet werden.
Stellen Sie sicher, dass die Parameter Zeichenfolgen sind, um Fehler zu vermeiden, die durch automatische Zahlenkonvertierung verursacht werden.
Verwenden Sie TRIM () und normale Ausdrücke, um die Eingangszeichenfolge zu reinigen, um das richtige Format zu gewährleisten.
Nach dem Verständnis dieser Details können Sie das Problem von "Das Ergebnis ist nicht wie erwartet, wenn binäre Zeichenfolgen mit Bindec () nicht erwartet werden".