base_convert()
Aprenda a usar a função base_convert() do PHP para converter números entre diferentes bases numéricas, de 2 a 36.
A função base_convert() converte um número de uma base numérica para outra — por exemplo, de decimal (base 10) para binário (base 2), ou de hexadecimal (base 16) de volta para decimal. É a mais geral entre os auxiliares de conversão de base do PHP, pois funciona com qualquer base de 2 a 36, enquanto funções como dechex() ou bindec() estão limitadas a um único par de bases.
Esta página aborda a sintaxe, o intervalo válido de bases, um conjunto de exemplos executáveis, as armadilhas (sensibilidade a maiúsculas, frações, limites de precisão) e quando usar uma função mais específica.
Sintaxe
base_convert(string $num, int $from_base, int $to_base): string| Parâmetro | Descrição |
|---|---|
$num | O número a converter, fornecido como string (um inteiro também é aceito e convertido para string). |
$from_base | A base em que $num está atualmente escrito. Deve estar entre 2 e 36. |
$to_base | A base para a qual converter $num. Deve estar entre 2 e 36. |
Valor de retorno: o número convertido como uma string, sempre em letras minúsculas. Bases acima de 10 usam as letras a–z para os dígitos 10–35 (portanto, a base 16 usa 0-9 e a-f, e a base 36 usa 0-9 e a-z).
Um exemplo básico
O uso mais comum é converter um número decimal para binário:
O decimal 10 torna-se a string "1010" em binário. Note que o resultado é uma string, não um inteiro — tenha isso em mente se planeja fazer operações aritméticas com ele depois.
Conversão entre bases comuns
A mesma função lida com hexadecimal, octal e qualquer base intermediária. Veja várias conversões lado a lado:
<?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
?>Isto exibe:
255
ff
511
101000110111001100110100
1295Como base_convert() compreende os dois lados da conversão, não é necessário encadear duas chamadas separadas para, por exemplo, ir de hexadecimal para binário.
Pontos de atenção
- As letras são normalizadas. As letras de entrada podem ser maiúsculas ou minúsculas (
"FF"e"ff"funcionam igualmente), mas a saída é sempre em minúsculas. - Frações não são suportadas.
base_convert()funciona apenas com números inteiros. Um valor como"12.34"tem o.tratado como caractere inválido — ele é removido e apenas os dígitos são convertidos (e o PHP 8.1+ emite um aviso de depreciação para os caracteres ignorados). - Dígitos inválidos são ignorados. Um caractere que não é válido na
$from_base(por exemplo, um9quando$from_baseé 8) é descartado silenciosamente em vez de gerar um erro, portanto valide sua entrada primeiro. - A precisão é limitada. Internamente, o valor é tratado como número de ponto flutuante. Inteiros muito grandes podem perder precisão e produzir um resultado inexato. Para conversão de base com precisão arbitrária, use a extensão GMP com
gmp_init()e uma base.
Quando usar uma função mais específica
Se você sempre está convertendo de ou para a base 10, as funções dedicadas são mais claras e ligeiramente mais rápidas:
dechex()/hexdec()— decimal ⇄ hexadecimaldecbin()/bindec()— decimal ⇄ bináriodecoct()/octdec()— decimal ⇄ octal
Use base_convert() quando nenhuma das bases for 10 (por exemplo, hex → binário) ou quando a base for incomum, como base 36 (frequentemente usada para IDs curtos e amigáveis para URL).
Conclusão
base_convert() é a ferramenta de uso geral do PHP para mover um número inteiro entre quaisquer dois sistemas numéricos, da base 2 à base 36. Lembre-se de que ela retorna uma string em minúsculas, ignora frações e dígitos inválidos, e está limitada pela precisão de ponto flutuante para valores muito grandes. Para as conversões comuns de decimal para X, os auxiliares dedicados dec*() / *dec() geralmente são a melhor escolha.