dechex()
Aprende a usar la función dechex() de PHP para convertir números decimales a cadenas hexadecimales con ejemplos prácticos.
La función dechex() de PHP convierte un entero decimal (base 10) en su representación string hexadecimal (base 16). El hexadecimal es la notación que hay detrás de los colores CSS (#ff0000), las direcciones de memoria, los volcados de bytes y muchos formatos de archivos y redes, por lo que dechex() es el ayudante ideal cuando necesitas mostrar un número en base 16.
Este capítulo cubre la sintaxis de la función, cómo maneja los números negativos y los flotantes, y las formas más comunes en que se usa en código real.
Sintaxis
dechex(int $num): string$num— el entero decimal a convertir. Se interpreta como un entero de 64 bits, por lo que el valor máximo exactamente representable esPHP_INT_MAX(9223372036854775807).- Valor de retorno — un string hexadecimal en minúsculas (dígitos
0-9y letrasa-f). El resultado no tiene prefijo0xni ceros iniciales.
Ejemplo básico
255 es el valor más grande que cabe en un solo byte, por lo que se convierte a ff — los dos dígitos hexadecimales más altos. Algunas conversiones más hacen que el patrón quede claro:
<?php
echo dechex(0); // 0
echo "\n";
echo dechex(10); // a
echo "\n";
echo dechex(16); // 10
echo "\n";
echo dechex(255); // ff
?>Ten en cuenta que dechex(16) devuelve "10" — eso es "uno-cero" en base 16 (16 en decimal), no el número decimal diez.
Números negativos y flotantes
dechex() solo funciona con enteros, pero no rechaza otro tipo de entrada — la coerciona primero, lo que puede sorprenderte:
- Los flotantes se truncan hacia cero antes de la conversión.
dechex(20.5)se trata como20y devuelve14. - Los números negativos se interpretan como su representación en complemento a dos sin signo. En una versión de 64 bits,
dechex(-1)devuelveffffffffffffffff(16 dígitosf), no un valor con signo negativo.
<?php
echo dechex(20.5); // 14 (the 20.5 is truncated to 20)
echo "\n";
echo dechex(-1); // ffffffffffffffff on 64-bit PHP
?>Si necesitas un string hexadecimal con signo, maneja el signo tú mismo: ($n < 0 ? '-' : '') . dechex(abs($n)).
Relleno y formateo de la salida
Dado que dechex() elimina los ceros iniciales, un byte de un solo dígito como 5 vuelve como "5" en lugar de "05". Cuando necesitas un ancho fijo — por ejemplo, construyendo un color CSS a partir de componentes RGB — rellena el resultado:
<?php
$r = 5; $g = 200; $b = 16;
$color = sprintf('#%02s%02s%02s', dechex($r), dechex($g), dechex($b));
echo $color; // #05c810
?>También puedes formatear el hexadecimal directamente con sprintf() usando la conversión %x (minúsculas) o %X (mayúsculas), que suele ser más limpio cuando también quieres relleno:
<?php
echo sprintf('%02X', 255); // FF
?>La inversa: hexdec()
Para hacer el camino inverso — de un string hexadecimal de vuelta a un entero decimal — usa hexdec(). Las dos funciones son inversas entre sí:
<?php
echo hexdec(dechex(255)); // 255
?>Cuándo usar dechex()
- Generar o inspeccionar códigos de color CSS / hex a partir de valores RGB numéricos.
- Producir volcados hexadecimales de datos binarios junto con
bin2hex(). - Mostrar valores de máscara de bits o indicadores en una forma compacta y legible.
- Registrar valores de memoria u offset en la base que los desarrolladores esperan.
Para otras bases, PHP ofrece funciones equivalentes: decbin() para binario y decoct() para octal, con bindec() y octdec() para convertir de vuelta.
Conclusión
dechex() convierte un entero decimal en un string hexadecimal en minúsculas, sin prefijo 0x y sin ceros iniciales. Ten en cuenta sus particularidades — los flotantes se truncan, los negativos se vuelven sin signo — y recurre a sprintf('%02x', ...) cuando necesites relleno. Combínala con hexdec() siempre que necesites ir y volver entre las dos bases.