W3docs

hexdec()

Hoy hablaremos de la función hexdec() en PHP, usada para convertir un número hexadecimal a su equivalente decimal.

La función hexdec() de PHP convierte una cadena hexadecimal (base 16) en su equivalente decimal (base 10). Es la inversa de dechex(), y resulta muy útil cuando se leen valores hex provenientes de colores, volcados de bytes, hashes o protocolos de bajo nivel y se necesita operar aritméticamente con ellos.

Esta página cubre la sintaxis, el tipo de retorno real, cómo maneja hexdec() los caracteres no válidos, el problema con números grandes y cómo se relaciona con las demás funciones de conversión de bases.

Sintaxis

hexdec(string $hex_string): int|float
  • $hex_string — la cadena hexadecimal a convertir. Los dígitos hex son 0-9 y a-f (sin distinción de mayúsculas/minúsculas, por lo que FF y ff son equivalentes).
  • Valor de retorno — el valor decimal como int, o como float cuando el número es demasiado grande para caber en un entero de PHP.

Un Ejemplo Básico

php— editable, runs on the server

1a en base 16 significa 1 × 16 + 10 = 26, que es el valor que se imprime. La entrada es una cadena aquí — esa es la forma normal y recomendada de pasar valores hex, ya que un literal como 1a no es PHP válido y 0x1a ya sería un entero.

Conversión de Varios Valores

hexdec() no distingue mayúsculas de minúsculas e ignora cualquier prefijo 0x que puedas copiar desde otra herramienta:

<?php
echo hexdec("ff"), "\n";   // 255
echo hexdec("FF"), "\n";   // 255 (same — case does not matter)
echo hexdec("100"), "\n";  // 256
echo hexdec("7fff"), "\n"; // 32767
echo hexdec("0x1A"), "\n"; // 26  (the "0x" is ignored)
?>

Un uso real habitual es dividir un color CSS en hexadecimal en sus canales rojo, verde y azul:

<?php
$color = "ff8800";

$red   = hexdec(substr($color, 0, 2)); // 255
$green = hexdec(substr($color, 2, 2)); // 136
$blue  = hexdec(substr($color, 4, 2)); // 0

echo "rgb($red, $green, $blue)"; // rgb(255, 136, 0)
?>

Cómo Se Manejan los Caracteres No Válidos

hexdec() no lanza un error con una cadena mal formada. En cambio, cada carácter que no sea un dígito hex válido se ignora silenciosamente (y, desde PHP 7.4, se emite un aviso de obsolescencia/E_WARNING). Los dígitos válidos restantes siguen convirtiéndose:

<?php
echo hexdec("a0.5"), "\n"; // 2565 — the "." is dropped, so "a05" is converted
echo hexdec("xyz1f"), "\n"; // 31  — only "1f" is valid hex
?>

Dado que el fallo es silencioso, valida la entrada tú mismo cuando pueda ser de origen no confiable. ctype_xdigit() comprueba que una cadena contenga solo dígitos hex:

<?php
$input = "a0.5";

if (ctype_xdigit($input)) {
    echo hexdec($input);
} else {
    echo "Not a valid hexadecimal string";
}
// Not a valid hexadecimal string
?>

Los Números Grandes Devuelven un Float

Los enteros de PHP están limitados por la plataforma (64 bits en la mayoría de sistemas modernos). Cuando un valor hex supera PHP_INT_MAX, hexdec() devuelve un float en lugar de un int para que el valor no se trunque, aunque los floats muy grandes pierden precisión:

<?php
var_dump(hexdec("1a"));               // int(26)
var_dump(hexdec("ffffffffffffffff")); // float(1.8446744073709552E+19)
?>

Si necesitas aritmética exacta con números hex muy grandes, utiliza las extensiones BCMath o GMP en su lugar.

Funciones de Conversión de Bases Relacionadas

hexdec() es una de las funciones de una familia de conversores de bases. Elige la que coincida con tus bases de entrada y salida:

FunciónConvierte desdeConvierte a
hexdec()hexadecimaldecimal
dechex()decimalhexadecimal
bindec()binariodecimal
octdec()octaldecimal

Para bases arbitrarias (de base 2 a base 36) usa base_convert(), y para convertir una cadena hex en bytes sin procesar utiliza hex2bin().

Conclusión

hexdec() convierte una cadena hexadecimal en un número decimal, devolviendo un int (o un float para valores muy grandes). Recuerda que ignora los caracteres no válidos de forma silenciosa — así que valida la entrada no confiable primero con ctype_xdigit() — y usa su contraparte dechex() para convertir de vuelta.

Práctica

Práctica
¿Qué hace la función hexdec de PHP?
¿Qué hace la función hexdec de PHP?
Was this page helpful?