W3docs

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âmetroDescrição
$numO número a converter, fornecido como string (um inteiro também é aceito e convertido para string).
$from_baseA base em que $num está atualmente escrito. Deve estar entre 2 e 36.
$to_baseA 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 az 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:

php— editable, runs on the server

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
1295

Como 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, um 9 quando $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:

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.

Prática

Prática
O que a função base_convert() do PHP faz?
O que a função base_convert() do PHP faz?
Was this page helpful?