bindec()
Aprende a usar la función bindec() en PHP para convertir números binarios a decimales con ejemplos prácticos.
La función bindec() convierte una cadena de dígitos binarios (base 2) en su valor decimal (base 10). Es la inversa de decbin(), y es la función a la que recurrirás cuando leas datos binarios — una máscara de permisos, un indicador de bit, un valor analizado desde texto — y necesites un entero ordinario con el que trabajar.
Sintaxis
bindec(string $binary_string): int|float$binary_string— el número binario a convertir, pasado como una string de0s y1s (por ejemplo"1010").- Valor de retorno — el equivalente decimal. Es un
intcuando el valor cabe en el rango de enteros de PHP, y unfloatpara números binarios muy grandes que de otro modo producirían un desbordamiento.
Un ejemplo básico
La cadena binaria "1010" es 1×8 + 0×4 + 1×2 + 0×1 = 10, por lo que bindec() devuelve 10.
¿Por qué pasar una string y no un número?
Un error común al principio es escribir bindec(1010) sin comillas. Eso funciona por casualidad para valores pequeños, pero un literal como 0101 es interpretado por PHP como un número octal antes de que bindec() lo vea, y los literales binarios grandes pierden los ceros iniciales. Pasa siempre el valor binario como una string entre comillas para que los dígitos lleguen intactos:
<?php
echo bindec("00001111"); // 15 — leading zeros are fine in a string
?>Cómo se manejan los caracteres no válidos
bindec() solo entiende 0 y 1. Cualquier otro carácter se descarta silenciosamente (esto genera un aviso de obsolescencia en PHP 8.1+), por lo que el resultado no es el esperado:
<?php
echo bindec("1012"); // 5 — the "2" is ignored, leaving "101" = 5
echo "\n";
echo bindec(""); // 0 — an empty string is treated as zero
?>Como la función falla silenciosamente, valida primero la entrada del usuario con preg_match('/^[01]+$/', $value) antes de convertir.
Conversión inversa con decbin()
bindec() y decbin() son inversas una de la otra, lo que resulta útil para inspeccionar o construir máscaras de bits:
<?php
$decimal = 42;
$binary = decbin($decimal); // "101010"
$back = bindec($binary); // 42
echo "$decimal -> $binary -> $back"; // 42 -> 101010 -> 42
?>Un uso práctico: leer indicadores de bit
Las cadenas binarias son una manera sencilla de describir un conjunto de opciones activadas/desactivadas. Convertirlas a decimal permite comprobar bits individuales con el operador AND a nivel de bits:
<?php
define('READ', bindec("100")); // 4
define('WRITE', bindec("010")); // 2
define('EXECUTE', bindec("001")); // 1
$permissions = bindec("110"); // READ + WRITE = 6
echo ($permissions & WRITE) ? "can write\n" : "cannot write\n"; // can write
echo ($permissions & EXECUTE) ? "can execute\n" : "cannot execute\n"; // cannot execute
?>Funciones de conversión relacionadas
| Función | Convierte |
|---|---|
decbin() | decimal → cadena binaria |
hexdec() | hexadecimal → decimal |
octdec() | octal → decimal |
base_convert() | entre cualquier par de bases (2–36) |
Conclusión
bindec() convierte una cadena binaria en un número decimal, devolviendo un int (o un float para valores muy grandes). Recuerda pasar el valor como una string entre comillas, validarlo primero porque los caracteres no binarios se ignoran silenciosamente, y combinarlo con decbin() cuando necesites convertir en la dirección contraria. Con estas herramientas podrás trabajar cómodamente con máscaras de bits, indicadores y cualquier dato almacenado en base 2.