base_convert()
Erfahren Sie, wie base_convert() in PHP eine Zahl von einer Basis in eine andere umwandelt – mit Beispielen für Hex, Binär und mehr.
Die Funktion base_convert() wandelt eine Zahl von einem Zahlensystem in ein anderes um — zum Beispiel von Dezimal (Basis 10) nach Binär (Basis 2) oder von Hexadezimal (Basis 16) zurück nach Dezimal. Sie ist das universellste Werkzeug unter den PHP-Basiskonvertierungsfunktionen, da sie mit jeder Basis von 2 bis 36 arbeitet, während Funktionen wie dechex() oder bindec() auf ein einzelnes Basispaar beschränkt sind.
Diese Seite behandelt die Syntax, den gültigen Bereich der Basen, eine Reihe von ausführbaren Beispielen, die Fallstricke (Groß-/Kleinschreibung, Brüche, Präzisionsgrenzen) und wann stattdessen eine speziellere Funktion sinnvoller ist.
Syntax
base_convert(string $num, int $from_base, int $to_base): string| Parameter | Beschreibung |
|---|---|
$num | Die zu konvertierende Zahl als string (ein Integer wird ebenfalls akzeptiert und in einen string umgewandelt). |
$from_base | Die Basis, in der $num aktuell geschrieben ist. Muss zwischen 2 und 36 liegen. |
$to_base | Die Basis, in die $num umgewandelt werden soll. Muss zwischen 2 und 36 liegen. |
Rückgabewert: die konvertierte Zahl als string, immer in Kleinbuchstaben. Basen über 10 verwenden die Buchstaben a–z für die Ziffern 10–35 (Basis 16 verwendet also 0-9 und a-f, Basis 36 verwendet 0-9 und a-z).
Ein einfaches Beispiel
Der häufigste Anwendungsfall ist die Umwandlung einer Dezimalzahl in Binär:
Dezimal 10 wird zum string "1010" im Binärsystem. Beachten Sie, dass das Ergebnis ein string und kein Integer ist — das sollte man im Hinterkopf behalten, wenn man anschließend arithmetische Operationen damit durchführen möchte.
Konvertierung zwischen gängigen Basen
Dieselbe Funktion verarbeitet Hexadezimal, Oktal und jede Basis dazwischen. Hier sind mehrere Konvertierungen nebeneinander:
<?php
echo base_convert("ff", 16, 10), "\n"; // hex -> decimal: 255
echo base_convert("255", 10, 16), "\n"; // decimal -> hex: ff
echo base_convert("777", 8, 10), "\n"; // octal -> decimal: 511
echo base_convert("a37334", 16, 2), "\n";// hex -> binary
echo base_convert("zz", 36, 10), "\n"; // base 36 -> decimal: 1295
?>Die Ausgabe lautet:
255
ff
511
101000110111001100110100
1295Da base_convert() beide Seiten der Konvertierung versteht, müssen Sie nicht zwei separate Aufrufe verketten, um beispielsweise von Hexadezimal nach Binär zu wechseln.
Worauf Sie achten sollten
- Groß-/Kleinschreibung wird normalisiert. Eingabebuchstaben können groß oder klein sein (
"FF"und"ff"funktionieren beide), aber die Ausgabe ist immer in Kleinbuchstaben. - Brüche werden nicht unterstützt.
base_convert()arbeitet nur mit ganzen Zahlen. Ein Wert wie"12.34"hat seinen.als ungültiges Zeichen — er wird entfernt, und nur die Ziffern werden konvertiert (ab PHP 8.1+ wird ein Deprecation-Hinweis für die ignorierten Zeichen ausgegeben). - Ungültige Ziffern werden ignoriert. Ein Zeichen, das in
$from_basenicht gültig ist (zum Beispiel eine9bei$from_base8), wird stillschweigend verworfen, anstatt einen Fehler auszulösen — validieren Sie Ihre Eingabe daher vorher. - Die Präzision ist begrenzt. Intern wird der Wert als Gleitkommazahl behandelt. Bei sehr großen Ganzzahlen kann Präzisionsverlust auftreten und ein ungenauer Wert zurückgegeben werden. Für beliebig genaue Basiskonvertierungen verwenden Sie die GMP-Erweiterung mit
gmp_init()und Angabe der Basis.
Wann eine speziellere Funktion sinnvoller ist
Wenn Sie immer von oder nach Basis 10 konvertieren, sind die dedizierten Funktionen klarer und geringfügig schneller:
dechex()/hexdec()— Dezimal ⇄ Hexadezimaldecbin()/bindec()— Dezimal ⇄ Binärdecoct()/octdec()— Dezimal ⇄ Oktal
Greifen Sie auf base_convert() zurück, wenn keine der beiden Basen 10 ist (z. B. Hex → Binär) oder wenn die Basis ungewöhnlich ist, wie etwa Basis 36 (häufig für kurze, URL-freundliche IDs verwendet).
Fazit
base_convert() ist PHPs universelles Werkzeug, um eine ganze Zahl zwischen beliebigen zwei Zahlensystemen von Basis 2 bis Basis 36 umzuwandeln. Beachten Sie, dass es einen Kleinbuchstaben-string zurückgibt, Brüche und ungültige Ziffern ignoriert und bei sehr großen Werten durch die Gleitkomma-Präzision begrenzt ist. Für die gängigen Dezimal-nach-X-Konvertierungen sind die dedizierten dec*() / *dec()-Hilfsfunktionen in der Regel die bessere Wahl.