In PHP wird die BindEc () -Funktion verwendet, um Binärzahlen (als Zeichenfolgen dargestellt) in Dezimalzahlen umzuwandeln. In der tatsächlichen Verwendung können Sie jedoch auf einige Fehler oder Probleme stoßen, die dazu führen, dass die Funktion nicht wie erwartet funktioniert. Das Verständnis dieser häufigen Fehler und Handhabungstipps kann Ihnen helfen, diese Probleme zu vermeiden oder zu lösen und sicherzustellen, dass Ihr Code ordnungsgemäß funktioniert.
Die grundlegende Syntax der BindEc () -Funktion lautet wie folgt:
<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 : Dies ist eine Zeichenfolge, die Binärzahlen enthält (nur durch Zeichen '0' und '1').
Der Rückgabewert ist eine Dezimalbezahlung.
Zum Beispiel:
<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">// Ausgabe:13</span></span><span>
</span></span>
Binec () akzeptiert nur Zeichenfolgen aus 0 und 1. Wenn die Zeichenfolge andere Zeichen (z. B. Leerzeichen, Buchstaben, Symbole usw.) enthält, wird ein Fehler oder ein 0 zurückgegeben.
<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">// Ausgabe:0</span></span><span>
</span></span>
Stellen Sie sicher, dass die übergebene Zeichenfolge nur binäre Zahlen enthält. Wenn Sie sich über die Gültigkeit der Eingabe nicht sicher sind, können Sie preg_match () verwenden, um das String -Format zu überprüfen.
<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">"Ungültige binäre Zeichenfolge"</span></span><span>;
}
</span></span>
Wenn die an BindEc () übergebene Zeichenfolge leer ist, beträgt der Rückgabewert 0. Dies ist zwar kein Fehler, aber es ist möglicherweise nicht das Verhalten, das Sie erwarten.
<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">// Ausgabe:0</span></span><span>
</span></span>
Überprüfen Sie, ob die Zeichenfolge leer ist. Wenn leer, kann ein Standardwert angegeben werden oder eine Fehlermeldung ausgelöst werden.
<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">"Die Eingangszeichenfolge kann nicht leer sein"</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>
Binec () ignoriert automatisch führende Nullen in binären Zeichenfolgen. Dies wirkt sich zwar normalerweise nicht auf die Konvertierungen aus, wenn Sie die führenden Nullen genau bewältigen möchten, können Sie sie im Voraus entfernen.
<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">// Ausgabe:5</span></span><span>
</span></span>
Sie können wählen, ob Sie führende Nullen entfernen oder sie zum Debuggen oder Verarbeitung lassen können.
<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">// Ausgabe:5</span></span><span>
</span></span>
Wenn eine binäre Zeichenfolge sehr große Zahlen darstellt, kann Binec () nicht korrekt behandelt werden. Obwohl der Ganzzahltyp von PHP die meisten häufigsten Werte unterstützt, können Überlauf oder Fehler bei Werten auftreten, die nicht auf Plattformumfang liegen.
<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">// Überschreiten 64 Bisschen</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">// Kann Überlauf verursachen</span></span><span>
</span></span>
Für super große binäre Zeichenfolgen können Sie die Funktionen gmp_init () und gmp_strval () verwenden, die die beliebige numerische Verarbeitung unterstützen.
<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">// Große Zahlen richtig konvertieren</span></span><span>
</span></span>
Die Funktion tinec () unterstützt keine Verarbeitung negativer Zahlen in binären Darstellungen (wie Komplementform). Wenn Sie sich mit negativen Zahlen befassen müssen, müssen Sie normalerweise manuell konvertieren.
<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">// Ausgabe:0,Keine negative Vorzeichenerkennung</span></span><span>
</span></span>
Identifizieren Sie manuell das negative Zeichen und konvertieren.
<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">// Ausgabe:-13</span></span><span>
</span></span>
Die Funktion Binesec () ist ein sehr nützliches Instrument in PHP, hat aber auch einige häufige Einschränkungen und potenzielle Probleme. Durch die Gewährleistung der Gültigkeit der Eingangszeichenfolge, der Umgang mit führenden Nullen und großen Werten können Sie die meisten häufigen Fehler vermeiden. Bei negativen Zahlen und Binärzeichen für Sonderformat muss es möglicherweise manuell verarbeitet werden. Wenn Sie diese Techniken beherrschen, können Sie die BindEc () -Funktion von PHP effizienter verwenden.