base_convert()
Aprende a usar la función base_convert() de PHP para convertir números de una base numérica a otra, con ejemplos y advertencias prácticas.
La función base_convert() convierte un número de una base numérica a otra — por ejemplo, de decimal (base 10) a binario (base 2), o de hexadecimal (base 16) de vuelta a decimal. Es la más general de las funciones de conversión de bases de PHP, porque funciona con cualquier base del 2 al 36, mientras que funciones como dechex() o bindec() están limitadas a un único par de bases.
Esta página cubre la sintaxis, el rango válido de bases, un conjunto de ejemplos ejecutables, los problemas a tener en cuenta (sensibilidad a mayúsculas, fracciones, límites de precisión) y cuándo conviene usar una función más específica.
Sintaxis
base_convert(string $num, int $from_base, int $to_base): string| Parámetro | Descripción |
|---|---|
$num | El número a convertir, proporcionado como string (también se acepta un entero y se convierte a string). |
$from_base | La base en la que está escrito actualmente $num. Debe estar entre 2 y 36. |
$to_base | La base a la que se convertirá $num. Debe estar entre 2 y 36. |
Valor de retorno: el número convertido como string, siempre en minúsculas. Las bases superiores a 10 utilizan las letras a–z para los dígitos del 10 al 35 (así, la base 16 usa 0-9 y a-f, y la base 36 usa 0-9 y a-z).
Un ejemplo básico
El uso más común es convertir un número decimal a binario:
El decimal 10 se convierte en el string "1010" en binario. Ten en cuenta que el resultado es un string, no un entero — recuérdalo si planeas hacer operaciones aritméticas con él después.
Conversión entre bases comunes
La misma función maneja hexadecimal, octal y cualquier base intermedia. Aquí se muestran varias conversiones en paralelo:
<?php
echo base_convert("ff", 16, 10), "\n"; // hex -> decimal: 255
echo base_convert("255", 10, 16), "\n"; // decimal -> hex: ff
echo base_convert("777", 8, 10), "\n"; // octal -> decimal: 511
echo base_convert("a37334", 16, 2), "\n";// hex -> binary
echo base_convert("zz", 36, 10), "\n"; // base 36 -> decimal: 1295
?>Esto imprime:
255
ff
511
101000110111001100110100
1295Dado que base_convert() entiende ambos extremos de la conversión, no es necesario encadenar dos llamadas separadas para, por ejemplo, pasar de hexadecimal a binario.
Aspectos a tener en cuenta
- Las mayúsculas se normalizan. Las letras de entrada pueden ser mayúsculas o minúsculas (
"FF"y"ff"funcionan igual), pero la salida es siempre en minúsculas. - Las fracciones no están soportadas.
base_convert()trabaja solo con números enteros. Un valor como"12.34"tiene el.tratado como un carácter inválido — se elimina y solo se convierten los dígitos (y PHP 8.1+ emite un aviso de obsolescencia por los caracteres ignorados). - Los dígitos inválidos son ignorados. Un carácter que no es válido en
$from_base(por ejemplo un9cuando$from_basees 8) se descarta silenciosamente en lugar de generar un error, por lo que conviene validar la entrada primero. - La precisión es limitada. Internamente el valor se maneja como un número de punto flotante. Los enteros muy grandes pueden perder precisión y producir un resultado inexacto. Para conversión de bases con precisión arbitraria, utiliza la extensión GMP con
gmp_init()especificando una base.
Cuándo usar una función más específica
Si siempre conviertes hacia o desde la base 10, las funciones dedicadas son más claras y ligeramente más rápidas:
dechex()/hexdec()— decimal ⇄ hexadecimaldecbin()/bindec()— decimal ⇄ binariodecoct()/octdec()— decimal ⇄ octal
Usa base_convert() cuando ninguna de las bases sea 10 (por ejemplo, hex → binario) o cuando la base sea algo inusual como la base 36 (frecuentemente usada para IDs cortos y compatibles con URL).
Conclusión
base_convert() es la herramienta de propósito general de PHP para mover un número entero entre cualquier par de sistemas numéricos desde la base 2 hasta la base 36. Recuerda que devuelve un string en minúsculas, ignora fracciones y dígitos inválidos, y está limitada por la precisión de punto flotante para valores muy grandes. Para las conversiones habituales de decimal a X, los helpers dedicados dec*() / *dec() suelen ser la mejor opción.