W3docs

hexdec()

Die PHP-Funktion hexdec() konvertiert eine hexadezimale Zahl in ihren dezimalen Äquivalent. Hier erfahren Sie Syntax und Verwendung.

Die PHP-Funktion hexdec() konvertiert einen hexadezimalen (Basis-16) String in sein dezimales (Basis-10) Äquivalent. Sie ist die Umkehrung von dechex() und ist praktisch, wenn Sie Hex-Werte aus Farben, Byte-Dumps, Hashes oder Low-Level-Protokollen lesen und damit rechnen möchten.

Diese Seite behandelt die Syntax, den tatsächlichen Rückgabetyp, den Umgang von hexdec() mit ungültigen Zeichen, die Besonderheit bei großen Zahlen und die Beziehung zu anderen Basis-Konvertierungsfunktionen.

Syntax

hexdec(string $hex_string): int|float
  • $hex_string — der hexadezimale String, der konvertiert werden soll. Hex-Ziffern sind 0-9 und a-f (Groß-/Kleinschreibung wird nicht unterschieden, daher sind FF und ff gleich).
  • Rückgabewert — der dezimale Wert als int, oder ein float, wenn die Zahl zu groß ist, um in einen PHP-Integer zu passen.

Ein einfaches Beispiel

php— editable, runs on the server

1a in Basis-16 bedeutet 1 × 16 + 10 = 26, also der ausgegebene Wert. Die Eingabe ist hier ein String — das ist die normale und empfohlene Art, Hex-Werte zu übergeben, weil ein Literal wie 1a in PHP nicht gültig ist und 0x1a bereits ein Integer wäre.

Mehrere Werte konvertieren

hexdec() unterscheidet nicht zwischen Groß- und Kleinschreibung und ignoriert ein eventuell vorhandenes 0x-Präfix, das aus einem anderen Werkzeug kopiert wurde:

<?php
echo hexdec("ff"), "\n";   // 255
echo hexdec("FF"), "\n";   // 255 (same — case does not matter)
echo hexdec("100"), "\n";  // 256
echo hexdec("7fff"), "\n"; // 32767
echo hexdec("0x1A"), "\n"; // 26  (the "0x" is ignored)
?>

Ein häufiger Praxisanwendungsfall ist die Aufteilung einer CSS-Hexfarbe in ihre Rot-, Grün- und Blaukanäle:

<?php
$color = "ff8800";

$red   = hexdec(substr($color, 0, 2)); // 255
$green = hexdec(substr($color, 2, 2)); // 136
$blue  = hexdec(substr($color, 4, 2)); // 0

echo "rgb($red, $green, $blue)"; // rgb(255, 136, 0)
?>

Umgang mit ungültigen Zeichen

hexdec() wirft bei einem fehlerhaften String keinen Fehler. Stattdessen werden alle Zeichen, die keine gültigen Hex-Ziffern sind, still ignoriert (und seit PHP 7.4 wird eine Deprecation-/E_WARNING-Meldung ausgegeben). Die verbleibenden gültigen Ziffern werden dennoch konvertiert:

<?php
echo hexdec("a0.5"), "\n"; // 2565 — the "." is dropped, so "a05" is converted
echo hexdec("xyz1f"), "\n"; // 31  — only "1f" is valid hex
?>

Da der Fehler still ignoriert wird, sollten Sie die Eingabe selbst validieren, wenn sie aus unbekannten Quellen stammt. ctype_xdigit() prüft, ob ein String ausschließlich Hex-Ziffern enthält:

<?php
$input = "a0.5";

if (ctype_xdigit($input)) {
    echo hexdec($input);
} else {
    echo "Not a valid hexadecimal string";
}
// Not a valid hexadecimal string
?>

Große Zahlen geben einen Float zurück

PHP-Integer sind plattformabhängig (64-Bit auf den meisten modernen Systemen). Wenn ein Hex-Wert PHP_INT_MAX übersteigt, gibt hexdec() einen float statt eines int zurück, damit der Wert nicht abgeschnitten wird — obwohl sehr große Floats an Präzision verlieren:

<?php
var_dump(hexdec("1a"));               // int(26)
var_dump(hexdec("ffffffffffffffff")); // float(1.8446744073709552E+19)
?>

Wenn Sie exakte Arithmetik mit großen Hex-Zahlen benötigen, verwenden Sie stattdessen die Erweiterungen BCMath oder GMP.

Verwandte Basis-Konvertierungsfunktionen

hexdec() gehört zu einer Familie von Basis-Konvertierern. Wählen Sie die Funktion, die Ihren Eingabe- und Ausgabebasen entspricht:

FunktionKonvertiert vonKonvertiert nach
hexdec()hexadezimaldezimal
dechex()dezimalhexadezimal
bindec()binärdezimal
octdec()oktaldezimal

Für beliebige Basen (von Basis-2 bis Basis-36) verwenden Sie base_convert(), und um einen Hex-String in rohe Bytes umzuwandeln, verwenden Sie hex2bin().

Fazit

hexdec() wandelt einen hexadezimalen String in eine Dezimalzahl um und gibt einen int zurück (oder einen float bei sehr großen Werten). Beachten Sie, dass ungültige Zeichen still ignoriert werden — validieren Sie daher unbekannte Eingaben zuerst mit ctype_xdigit() — und verwenden Sie das Gegenstück dechex() für die Rückkonvertierung.

Übungen

Übung
Was macht die PHP-Funktion hexdec?
Was macht die PHP-Funktion hexdec?
Was this page helpful?