decoct()
La funzione decoct() in PHP converte un numero decimale in un numero ottale. Scopri sintassi, esempi e casi d'uso pratici.
La funzione decoct() converte un intero decimale (base 10) nella sua rappresentazione string ottale (base 8). È lo strumento integrato di PHP per la conversione da decimale a ottale, l'inverso di octdec().
L'ottale compare ancora nel codice reale — in modo particolare nei permessi dei file Unix, dove 0755 e 0644 sono valori ottali. decoct() permette di trasformare un intero di permesso calcolato nella familiare stringa a tre cifre.
Sintassi
decoct(int $num): string$num— l'intero decimale da convertire. Se viene passato un float, viene prima troncato a un intero.- Valore restituito — una string contenente la rappresentazione ottale. Il risultato è una string, non un numero, perché i valori ottali vengono tipicamente visualizzati piuttosto che usati in ulteriori operazioni aritmetiche.
Il numero massimo convertibile dipende dalla dimensione dell'intero sulla piattaforma (PHP_INT_MAX). I numeri negativi vengono interpretati utilizzando il loro schema di bit in complemento a due per la dimensione della parola della piattaforma.
Esempio di base
Il decimale 15 corrisponde a 17 in ottale (1 * 8 + 7 = 15). Si noti che echo stampa 17 senza zero iniziale — decoct() non aggiunge mai il prefisso 0 che i letterali ottali usano nel codice sorgente.
Valori comuni
<?php
echo decoct(8); // 10
echo "\n";
echo decoct(64); // 100
echo "\n";
echo decoct(493); // 755 (the rwxr-xr-x permission set)
?>Poiché 493 in ottale è 755, decoct() è utile quando si legge una modalità di file numerica e si vuole visualizzarla nel formato atteso da chmod.
Lettura dei bit dei permessi di un file
fileperms() restituisce la modalità includendo i bit del tipo di file, quindi applica la maschera & 0777 per mantenere solo la parte dei permessi prima della conversione:
<?php
$mode = 0755; // octal literal -> stored as decimal 493
echo decoct($mode & 0777); // 755
?>Attenzione
- L'output è una string senza zero iniziale. Se si ha bisogno della forma convenzionale a quattro caratteri, si deve anteporre manualmente:
'0' . decoct(493)produce"0755". - I float vengono troncati, non arrotondati.
decoct(15.9)restituisce"17"(identico adecoct(15)), perché il float viene prima convertito inint. - Gestisce solo gli interi. Per convertire tra basi arbitrarie, usare invece
base_convert().
Funzioni correlate
octdec()— l'inverso: da string ottale a decimale.dechex()edecbin()— convertono il decimale in esadecimale e binario.base_convert()— converte un numero tra qualsiasi coppia di basi da 2 a 36.