bindec()
Aprenda a usar a função bindec() no PHP para converter números binários em decimais, com exemplos práticos e dicas de uso.
A função bindec() converte uma string de dígitos binários (base 2) no seu valor decimal (base 10). Ela é o inverso de decbin(), e é a função que você utiliza sempre que precisa ler dados binários — uma máscara de permissão, um sinalizador de bit, um valor interpretado de texto — e necessita de um inteiro comum para trabalhar.
Sintaxe
bindec(string $binary_string): int|float$binary_string— o número binário a converter, passado como uma string de0s e1s (por exemplo"1010").- Valor de retorno — o equivalente decimal. É um
intquando o valor cabe no intervalo de inteiros do PHP, e umfloatpara números binários muito grandes que, de outra forma, causariam overflow.
Um exemplo básico
A string binária "1010" equivale a 1×8 + 0×4 + 1×2 + 0×1 = 10, portanto bindec() retorna 10.
Por que passar uma string e não um número?
Um erro comum é escrever bindec(1010) sem aspas. Isso funciona por acidente em valores pequenos, mas um literal como 0101 é interpretado pelo PHP como um número octal antes mesmo que bindec() o receba, e literais binários grandes perdem os zeros à esquerda. Sempre passe o valor binário como uma string entre aspas para que os dígitos cheguem intactos:
<?php
echo bindec("00001111"); // 15 — leading zeros are fine in a string
?>Como caracteres inválidos são tratados
bindec() entende apenas 0 e 1. Qualquer outro caractere é descartado silenciosamente (isso gera um aviso de depreciação no PHP 8.1+), e o resultado não é o 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 a função falha silenciosamente, valide a entrada fornecida pelo usuário com preg_match('/^[01]+$/', $value) antes de converter.
Conversão bidirecional com decbin()
bindec() e decbin() são funções inversas, o que é útil para inspecionar ou construir máscaras de bits:
<?php
$decimal = 42;
$binary = decbin($decimal); // "101010"
$back = bindec($binary); // 42
echo "$decimal -> $binary -> $back"; // 42 -> 101010 -> 42
?>Uso prático: leitura de sinalizadores de bit
Strings binárias são uma forma simples de descrever um conjunto de opções ligadas/desligadas. Converter para decimal permite testar bits individuais com o operador AND bit a bit:
<?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
?>Funções de conversão relacionadas
| Função | Converte |
|---|---|
decbin() | decimal → string binária |
hexdec() | hexadecimal → decimal |
octdec() | octal → decimal |
base_convert() | entre quaisquer duas bases (2–36) |
Conclusão
bindec() transforma uma string binária em um número decimal, retornando um int (ou um float para valores muito grandes). Lembre-se de passar o valor como uma string entre aspas, validá-lo primeiro porque caracteres não binários são ignorados silenciosamente, e combiná-lo com decbin() quando precisar converter na direção oposta. Com essas ferramentas à mão, você pode trabalhar com conforto com máscaras de bits, sinalizadores e quaisquer dados armazenados em base 2.