decoct()
Aprende a usar la función decoct() en PHP para convertir un número decimal en su representación octal.
La función decoct() convierte un entero decimal (base 10) en su representación string en octal (base 8). Es la herramienta integrada de PHP para la conversión de decimal a octal, la inversa de octdec().
El sistema octal sigue apareciendo en código real — especialmente en los permisos de archivos Unix, donde 0755 y 0644 son valores octales. decoct() permite convertir un entero de permisos calculado de vuelta a la familiar cadena de tres dígitos.
Sintaxis
decoct(int $num): string$num— el entero decimal a convertir. Si se pasa un float, primero se trunca a entero.- Valor de retorno — un string que contiene la representación octal. El resultado es un string, no un número, porque los valores octales generalmente se muestran en lugar de usarse en operaciones aritméticas adicionales.
El número más grande que se puede convertir depende del tamaño del entero en la plataforma (PHP_INT_MAX). Los números negativos se interpretan usando su patrón de bits en complemento a dos para el tamaño de palabra de la plataforma.
Ejemplo básico
El decimal 15 es 17 en octal (1 * 8 + 7 = 15). Nótese que echo imprime 17 sin cero inicial — decoct() nunca añade el prefijo 0 que usan los literales octales en el código fuente.
Valores comunes
<?php
echo decoct(8); // 10
echo "\n";
echo decoct(64); // 100
echo "\n";
echo decoct(493); // 755 (the rwxr-xr-x permission set)
?>Como 493 en octal es 755, decoct() resulta útil cuando se lee un modo de archivo numérico y se quiere mostrarlo de la forma que espera chmod.
Leer los bits de permisos de un archivo
fileperms() devuelve el modo incluyendo los bits de tipo de archivo, por lo que hay que aplicar una máscara con & 0777 para conservar solo la parte de permisos antes de convertir:
<?php
$mode = 0755; // octal literal -> stored as decimal 493
echo decoct($mode & 0777); // 755
?>Advertencias
- La salida es un string sin cero inicial. Si necesitas la forma convencional de cuatro caracteres, añádelo manualmente:
'0' . decoct(493)produce"0755". - Los floats se truncan, no se redondean.
decoct(15.9)devuelve"17"(igual quedecoct(15)), porque el float se convierte aintprimero. - Solo maneja enteros. Para convertir entre bases arbitrarias, usa
base_convert()en su lugar.
Funciones relacionadas
octdec()— la inversa: convierte un string octal de vuelta a decimal.dechex()ydecbin()— convierten decimal a hexadecimal y binario.base_convert()— convierte un número entre cualquier par de bases del 2 al 36.