Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 Unit Test Generator
 TLD Liste
 Webkatalog‑Verzeichnis

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

PHP Zahlensysteme: dechex, decbin, base_convert und bin2hex

Sie befinden sich: Home > Php Tutorial > PHP Zahlensysteme: dechex, ...

PHP Zahlensysteme: dechex, decbin, base_convert und bin2hex
Eintrag am:
01.06.2026
Hits / Besucher:
23
Sprache:
  Deutsch
Tutorial Art:
eigenes
Eingetragen von:
 
Beschreibung

PHP bringt eine ganze Reihe von Funktionen mit, um Zahlen zwischen verschiedenen Zahlensystemen umzuwandeln. Ob Hex-Farbe für CSS, kompakte ID in Base-36 oder Bit-Flag für Berechtigungen, für jeden dieser Fälle gibt es das passende Werkzeug. Dieser Überblick zeigt, welche Funktion wann die richtige Wahl ist und wo die typischen Stolperfallen liegen.

Was leistet PHP base_convert und seine Verwandten?

Wer in PHP zwischen Zahlensystemen konvertiert, hat eine ganze Familie von Funktionen zur Auswahl. Manche sind auf bestimmte Basen optimiert (dechex, decbin, decoct), andere sind generisch und erlauben jede Basis von 2 bis 36. Bei base_convert($number, $frombase, $tobase) werden die drei Parameter in genau dieser Reihenfolge erwartet: die Zahl, die Quellbasis und die Zielbasis. Daneben steht eine Funktion, die optisch ähnlich aussieht, aber etwas ganz anderes macht: bin2hex konvertiert Byte-Strings in Hex und ist KEINE Zahl-Konvertierung.

Illustration zum Tutorial: PHP Zahlensysteme: dechex, decbin, base_convert und bin2hex

Bevor Hex-Farben, kompakte Base-36-IDs und Bit-Flags im Detail folgen, gibt die Funktionsübersicht einen schnellen Wegweiser durch die ganze Familie.

Dieses Tutorial gibt einen Überblick über alle wichtigen Funktionen und zeigt ihre praktischen Einsatzgebiete: Hex-Farben für CSS, kompakte IDs in Base-36 mit PHP base_convert, Bit-Flags für Berechtigungen und Byte-Strings aus random_bytes. Im Mittelpunkt steht PHP base_convert als das flexibelste Werkzeug, ergänzt um die spezialisierten Helper. Das Verständnis dieser PHP base_convert-Familie hilft beim Bauen von URL-Shortenern, Permission-Systemen und Token-Generatoren.

FunktionEingabeAusgabeAnmerkung
dechex(255)int"ff"Dezimal -> Hex
hexdec('ff')stringint 255Hex -> Dezimal
decbin(10)int"1010"Dezimal -> Binär
bindec('1010')stringint 10Binär -> Dezimal
decoct(8)int"10"Dezimal -> Oktal
base_convert('ff', 16, 10)stringstring "255"beliebig 2-36
bin2hex("AB")string"4142"Byte-String -> Hex
hex2bin('4142')stringstring "AB"Hex -> Byte-String

Dezimal zu Hex und zurück mit dechex und hexdec

Das häufigste Konvertierungsproblem ist Dezimal zu Hex und zurück. PHP hat dafür das spezialisierte Paar dechex() und hexdec(). Wer eine Dezimalzahl in eine andere Basis als 16 umgewandelt haben will, greift weiterhin zu PHP base_convert. Für den Sonderfall Hex sind dechex und hexdec aber kürzer und in vielen Code-Reviews gewünschter Standard. Die Stellenwert-Umrechnung zwischen Basen ist ein Standard-Algorithmus aus der Informatik-Grundvorlesung.

<?php

echo dechex(255); /* ff */
echo dechex(4096); /* 1000 */
echo dechex(16711680); /* ff0000 (das ist Rot in HTML) */

echo hexdec('ff'); /* 255 */
echo hexdec('ABCDEF'); /* 11259375 */
echo hexdec('0x1A'); /* 26, '0x'-Praefix wird ignoriert */

dechex() gibt Hex-Strings in Kleinbuchstaben zurück. Wer Großbuchstaben braucht, ruft strtoupper() darauf an. hexdec() ist tolerant gegenüber dem 0x-Präfix und akzeptiert auch gemischte Schreibweisen wie aBcDeF. Bei sehr großen Werten gibt die Funktion einen Float statt eines Integer zurück, was zu Präzisionsverlust führen kann. Für arbitrare Präzision steht das gmp-Modul mit gmp_strval() bereit.

RGB zu Hex-Farbe mit sprintf und PHP base_convert

Eine der häufigsten praktischen Anwendungen ist das Generieren einer Hex-Farbe aus drei RGB-Werten. dechex() allein liefert "ff" oder "0", aber CSS erwartet immer zwei Stellen pro Komponente. sprintf mit dem %02x-Format-Code erledigt beides in einer Zeile: Konvertierung und Padding. Alternativ funktioniert das auch mit PHP base_convert, ist aber durch das fehlende Padding deutlich umständlicher.

<?php

function rgbZuHex(int $r, int $g, int $b): string
{
return sprintf('#%02x%02x%02x', $r, $g, $b);
}

echo rgbZuHex(255, 0, 128); /* #ff0080 */
echo rgbZuHex(0, 132, 255); /* #0084ff */
echo rgbZuHex(26, 35, 50); /* #1a2332 */

Das Format-Spezifizierer %02x heißt: Hex-Output, mindestens 2 Zeichen breit, mit führender Null aufgefüllt. Wer Großbuchstaben will, schreibt %02X. Die Umkehrung (Hex-Farbe in RGB) braucht eine kurze Hilfsfunktion, weil hexdec() jeweils auf Teilstrings angewendet wird.

<?php

function hexZuRgb(string $hex): array
{
$hex = ltrim($hex, '#');
return [
'r' => hexdec(substr($hex, 0, 2)),
'g' => hexdec(substr($hex, 2, 2)),
'b' => hexdec(substr($hex, 4, 2)),
];
}

print_r(hexZuRgb('#ff0080'));
/* Array ( [r] => 255 [g] => 0 [b] => 128 ) */

Dezimal zu Binär mit decbin und Bit-Flags

decbin() liefert eine Dezimalzahl als Binär-String, aber ohne führende Nullen. Für Bit-Flag-Visualisierung will man meist eine feste Bit-Breite, etwa 8 Bit für ein Byte. Dafür kombiniert man decbin() mit str_pad(), um führende Nullen aufzufüllen.

<?php

$berechtigungen = 0b101011; /* binaer-literal seit PHP 5.4 */

echo decbin($berechtigungen);
/* 101011 (ohne fuehrende Nullen) */

echo str_pad(decbin($berechtigungen), 8, '0', STR_PAD_LEFT);
/* 00101011 (8 Bit Breite) */

Bit-Flag-Logik ist klassisch für Berechtigungssysteme: Bit 0 ist Lesen, Bit 1 ist Schreiben, Bit 2 ist Löschen und so weiter. Mit den bitweise-Operatoren | (OR), & (AND) und ^ (XOR) lassen sich Flags kombinieren und einzeln prüfen.

<?php

const READ = 1 << 0; /* 1 */
const WRITE = 1 << 1; /* 2 */
const DELETE = 1 << 2; /* 4 */

$rechte = READ | WRITE; /* 3 */

echo str_pad(decbin($rechte), 8, '0', STR_PAD_LEFT);
/* 00000011 */

if ($rechte & WRITE) {
echo 'Schreibrecht gesetzt';
}

PHP base_convert für beliebige Basen

base_convert() ist die generische Variante. Die Funktion PHP base_convert konvertiert zwischen beliebigen Basen von 2 bis 36 und nutzt dafür die Ziffern 0-9 und die Buchstaben a-z. Das ist genug für alle praktisch relevanten Fälle. Wer höhere Basen wie Base64 braucht, muss eine eigene Implementierung schreiben oder das base64_encode-Tutorial konsultieren, denn PHP base_convert deckt nur den Bereich 2 bis 36 ab.

<?php

echo base_convert('15234', 10, 36); /* bs6 */
echo base_convert('bs6', 36, 10); /* 15234 */
echo base_convert('ff', 16, 2); /* 11111111 */
echo base_convert('1010', 2, 10); /* 10 */
echo base_convert('255', 10, 8); /* 377 (oktal) */

Der typische Anwendungsfall für PHP base_convert ist die Erzeugung kompakter IDs. Eine Datenbank-ID 15234 wird in Base-36 zu "bs6", was URL-freundlich kurz ist. URL-Shortener funktionieren genau nach diesem Prinzip. Die Konvertierung mit PHP base_convert ist verlustfrei umkehrbar, solange man unter der Float-Präzisionsgrenze bleibt (rund 15 Stellen Dezimal).

In der Praxis lohnt sich PHP base_convert besonders für Tracking-Codes, kurze Order-Nummern oder Affiliate-IDs. Eine Order-Nummer wie 1500000 wird mit Base-36 zu "wpc0", was auf Quittungen, in URLs oder QR-Codes deutlich lesbarer ist als die lange Dezimalvariante. Bei sehr großen Werten über 15 Dezimalstellen verlassen wir den sicheren Bereich von PHP base_convert und sollten auf das gmp-Modul wechseln.

<?php

/* PHP base_convert fuer kurze Order-Nummern */
function orderToShortCode(int $orderId): string
{
return strtoupper(base_convert((string) $orderId, 10, 36));
}

echo orderToShortCode(1); /* 1 */
echo orderToShortCode(99); /* 2R */
echo orderToShortCode(15234); /* BS6 */
echo orderToShortCode(1500000); /* WPC0 */

Welche dieser Funktionen am Ende greift, hängt vor allem davon ab, was genau umgewandelt werden soll. Das folgende Diagramm fasst die Entscheidung zwischen Zahl-Konvertierung, Byte-String und beliebiger Basis übersichtlich zusammen.

flowchart TD
    A[Eingabe] --> B{Zahl oder String?}
    B -->|Zahl| C[decbin / dechex / decoct]
    B -->|Byte-String| D[bin2hex]
    B -->|beliebige Basis| E[base_convert]
    C --> F[String-Repraesentation]
    D --> F
    E --> F
    F --> G[Anzeige oder Weiterverarbeitung]

bin2hex und hex2bin für Byte-Strings

Hier liegt der Trick, der viele Entwickler verwirrt. bin2hex() ist trotz des Namens keine Zahlen-Konvertierung. Die Funktion nimmt einen Byte-String entgegen und gibt seine Hex-Darstellung als String zurück. Jedes Byte wird zu zwei Hex-Zeichen.

<?php

echo bin2hex('A'); /* 41 */
echo bin2hex('AB'); /* 4142 */
echo bin2hex('hello'); /* 68656c6c6f */

Das ist genau die Funktion, die man braucht, wenn random_bytes() eingesetzt wird. Die Funktion liefert Bytes mit Werten von 0 bis 255, die nicht alle druckbar sind. Mit bin2hex() werden sie als lesbare Zeichenkette dargestellt, etwa für Logs, Token oder URL-IDs.

<?php

$token = bin2hex(random_bytes(16));
echo $token;
/* z.B. "9a3f2c8e1b7d4a6f5e2c8b9a1d3f7e8c" - 32 Zeichen Hex */

$bytes = hex2bin($token);
var_dump(strlen($bytes)); /* int(16) */

Die Umkehrung mit hex2bin() liefert die Original-Bytes zurück. Das ist nützlich, wenn ein Token aus der Datenbank gelesen wird und wieder als Byte-String für einen kryptographischen Vergleich gebraucht wird. Mehr zum Token-Handling steht im uniqid und random_bytes Tutorial.

Best Practices für PHP base_convert

Wer PHP base_convert im Alltag nutzt, hat schnell drei klare Faustregeln im Kopf. Erstens: bei reiner Hex-Konvertierung sind dechex und hexdec kürzer und gewünschter Standard. Zweitens: PHP base_convert ist die richtige Wahl, wenn die Zielbasis nicht 16 ist, also für Base-32 oder Base-36 IDs. Drittens: ab 15 Dezimalstellen oder 13 Hex-Zeichen wird die Float-Präzision von PHP base_convert kritisch, dann muss gmp_strval einspringen.

Stolperfallen Präzision und Großbuchstaben

Drei Punkte sind wichtig zu wissen. Erstens: base_convert() arbeitet intern mit Float und verliert Präzision bei sehr großen Zahlen. Eine Konvertierung wie base_convert('1234567890123456789', 10, 36) kann unerwartete Ergebnisse liefern, weil 19-stellige Zahlen die Float-Präzision sprengen. Für solche Fälle ist gmp_strval(gmp_init('1234...'), 36) die zuverlässige Wahl. Wer PHP base_convert in Produktion einsetzt, sollte deshalb immer prüfen, ob die Eingaben unter der Präzisionsgrenze bleiben.

Zweitens: dechex() und Verwandte liefern Kleinbuchstaben. CSS-Hex-Farben funktionieren in beiden Schreibweisen, aber konsistente Code-Standards bevorzugen oft Großbuchstaben. strtoupper(dechex($wert)) oder sprintf('%X', $wert) liefern den gleichen Effekt.

Drittens: bin2hex() und die Zahl-Konvertierungs-Funktionen sind nicht austauschbar. bin2hex(255) ist nicht "ff", sondern PHP konvertiert die Zahl 255 erst in den String "255" und gibt dann die Hex-Repräsentation der ASCII-Bytes zurück: 323535. Wer Hex von einer Zahl will, ist immer mit dechex() oder sprintf('%x', $wert) richtig.

Viertens: base_convert() arbeitet ausschließlich mit positiven Zahlen. Ein Aufruf wie base_convert('-100', 10, 16) ignoriert das Vorzeichen still und liefert ein verfälschtes Ergebnis. Wer negative Werte konvertieren will, muss das Vorzeichen vorher abspalten und nach der Konvertierung wieder anhängen, etwa über ($n < 0 ? '-' : '') . base_convert((string) abs($n), 10, 16). Bei sehr großen negativen Zahlen ist gmp_strval(gmp_init($n), 16) die saubere Variante, weil GMP Vorzeichen direkt unterstützt.

Sicherheits-Hinweis: Niemals für kryptographische Zwecke

Ein wichtiger Punkt, der in vielen Tutorials fehlt: PHP base_convert ist NICHT für sicherheitsrelevante IDs, Tokens oder Auth-Schlüssel geeignet. Wegen der Float-internen Verarbeitung und der begrenzten Präzision können unterschiedliche Eingabewerte denselben Output produzieren. Für URL-Shortener mit nicht-rateable IDs, Magic-Login-Links oder API-Keys führt das zu Kollisionen, die ein Angreifer ausnutzen könnte.

<?php

/* FALSCH: Vermeintlich kompakte Token-Erzeugung */
$token = base_convert((string) random_int(1, PHP_INT_MAX), 10, 36);

/* RICHTIG: Kryptographisch sichere Tokens mit random_bytes + bin2hex */
$token = bin2hex(random_bytes(16));
/* z.B. "9a3f2c8e1b7d4a6f5e2c8b9a1d3f7e8c" */

Faustregel: Wenn ein Wert "nicht erratbar" sein muss (Session-IDs, Reset-Tokens, Download-URLs mit Zugriffsschutz), gehört er über random_bytes() plus bin2hex() erzeugt. PHP base_convert eignet sich nur für öffentlich einsehbare, deterministische Konvertierungen wie Order-Codes, Hex-Farben oder Bit-Flags, bei denen Vorhersagbarkeit kein Sicherheitsrisiko ist.

Fazit

PHPs Zahlensystem-Funktionen decken alle gängigen Anwendungsfälle ab. PHP base_convert ist die generische Variante für Basen 2 bis 36, dechex und hexdec sind die spezialisierten Helfer für das häufige Hex-Format, decbin und bindec für Binär. Die Funktion bin2hex ist trotz des Namens kein Konvertierungs-Tool für Zahlen, sondern für Byte-Strings, etwa für Token aus random_bytes. Mit PHP base_convert und seinen Verwandten baut man Hex-Farben, kompakte IDs, Bit-Flag-Visualisierungen und lesbare Token-Darstellungen mit wenigen Zeilen Code. Wer die Präzisionsgrenzen von PHP base_convert kennt und im Zweifel auf gmp wechselt, hat ein verlässliches Werkzeug für den ganzen Alltag.

 


 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.