Start · Sprachen · PHP · Referenz · decoct

decoct

Funktion

Wandelt eine Dezimalzahl in ihre oktale Darstellung (Basis 8) um und gibt das Ergebnis als Zeichenkette zurück.

seit PHP 4.0.0 Kategorie: math

Signatur

decoct(int $num): string

Beschreibung

decoct() konvertiert eine ganze Dezimalzahl in die entsprechende Oktaldarstellung (Zahlensystem zur Basis 8). Das Ergebnis wird als string zurückgegeben, da oktale Zahlen häufig als Zeichenketten weiterverarbeitet werden – beispielsweise bei der Ausgabe von Dateisystemberechtigungen.

Die Funktion ist das Gegenstück zu octdec(), das die umgekehrte Richtung (Oktal → Dezimal) übernimmt. Sie ist äquivalent zu base_convert($num, 10, 8). Für die Umwandlung in andere Zahlensysteme stehen dechex() (Hexadezimal) und decbin() (Binär) bereit.

Typische Einsatzgebiete sind die leserliche Darstellung von UNIX-Dateiberechtigungen (z. B. 0755) oder überall dort, wo Systeme oder Protokolle Oktalwerte erwarten.

  • Bei negativen Zahlen auf 64-Bit-Systemen gibt PHP eine entsprechend lange oktale Zeichenkette zurück (vorzeichenlos interpretiert).
  • Das Ergebnis enthält kein führendes 0 – dies muss bei Bedarf manuell ergänzt werden.

Parameter

Name Typ Default Beschreibung
$num Pflicht int Die dezimale Ganzzahl, die in eine Oktaldarstellung umgewandelt werden soll.

Rückgabewert

Typ
string
Beschreibung
Die oktale Darstellung von num als Zeichenkette. Für den Wert 0 wird "0" zurückgegeben.

Beispiele

Einfache Dezimal-zu-Oktal-Konvertierung

<?php
$dezimal = 255;
$oktal = decoct($dezimal);
echo $oktal; // 377

// Mit führender Null ausgeben (für typische UNIX-Darstellung)
echo '0' . decoct(493); // 0755
377 0755

UNIX-Dateiberechtigung lesbar anzeigen

<?php
// chmod() erwartet Oktalwerte – decoct() hilft bei der Anzeige
$mode = fileperms('example.txt');
if ($mode !== false) {
    // Nur die unteren 12 Bits sind für die Berechtigungen relevant
    $berechtigung = '0' . decoct($mode & 0xFFF);
    echo 'Berechtigung: ' . $berechtigung;
} else {
    // Beispielwert zum Demonstrieren
    echo '0' . decoct(0755); // 0755
}
0755

Rücktransformation mit octdec()

<?php
$original  = 64;
$oktal     = decoct($original);  // "100"
$zurueck   = octdec($oktal);      // 64

echo "Dezimal: $original → Oktal: $oktal → zurück: $zurueck";
Dezimal: 64 → Oktal: 100 → zurück: 64

// Wichtig · Fallstricke

Negative Zahlen: Auf 64-Bit-Systemen wird eine negative Ganzzahl als vorzeichenloser 64-Bit-Wert interpretiert, was zu einer sehr langen okalen Zeichenkette führt. Soll ein Vorzeichen erhalten bleiben, muss dies manuell behandelt werden.

Führende Null: decoct() gibt keine führende 0 zurück. Wer oktale Literale im PHP-Quellcode (z. B. für chmod()) erzeugen möchte, muss die Null manuell voranstellen oder direkt Integer-Oktalliterale (0755) verwenden.

Große Zahlen: Bei Zahlen jenseits von PHP_INT_MAX kann es zu Überläufen kommen; in solchen Fällen empfiehlt sich base_convert() mit der BCMath- oder GMP-Erweiterung.