dechex()
Aprenda a usar a função dechex() do PHP para converter números decimais em representações hexadecimais.
A função dechex() do PHP converte um inteiro decimal (base 10) em sua representação string hexadecimal (base 16). O hexadecimal é a notação usada em cores CSS (#ff0000), endereços de memória, dumps de bytes e muitos formatos de arquivo e rede, por isso dechex() é o auxiliar ideal sempre que você precisar exibir um número na base 16.
Este capítulo aborda a sintaxe da função, como ela lida com números negativos e floats, e as formas mais comuns de usá-la em código real.
Sintaxe
dechex(int $num): string$num— o inteiro decimal a ser convertido. É interpretado como um inteiro de 64 bits, portanto o maior valor exatamente representável éPHP_INT_MAX(9223372036854775807).- Valor de retorno — uma string hexadecimal em minúsculas (dígitos
0-9e letrasa-f). O resultado não tem prefixo0xnem zeros à esquerda.
Exemplo Básico
255 é o maior valor que cabe em um único byte, então é convertido para ff — os dois maiores dígitos hexadecimais. Mais algumas conversões tornam o padrão claro:
<?php
echo dechex(0); // 0
echo "\n";
echo dechex(10); // a
echo "\n";
echo dechex(16); // 10
echo "\n";
echo dechex(255); // ff
?>Note que dechex(16) retorna "10" — isso é "um-zero" na base 16 (16 em decimal), não o número decimal dez.
Números Negativos e Floats
dechex() só funciona com inteiros, mas não rejeita outros tipos de entrada — ela os converte primeiro, o que pode surpreender:
- Floats são truncados em direção a zero antes da conversão.
dechex(20.5)é tratado como20e retorna14. - Números negativos são interpretados como sua representação em complemento de dois sem sinal. Em uma build de 64 bits,
dechex(-1)retornaffffffffffffffff(16 dígitosf), não um valor com sinal de menos.
<?php
echo dechex(20.5); // 14 (the 20.5 is truncated to 20)
echo "\n";
echo dechex(-1); // ffffffffffffffff on 64-bit PHP
?>Se você precisar de uma string hex com aparência de sinal, trate o sinal manualmente: ($n < 0 ? '-' : '') . dechex(abs($n)).
Preenchimento e Formatação da Saída
Como dechex() remove os zeros à esquerda, um byte de um único dígito como 5 retorna "5" em vez de "05". Quando você precisa de uma largura fixa — por exemplo, ao construir uma cor CSS a partir de componentes RGB — preencha o resultado:
<?php
$r = 5; $g = 200; $b = 16;
$color = sprintf('#%02s%02s%02s', dechex($r), dechex($g), dechex($b));
echo $color; // #05c810
?>Você também pode formatar o hex diretamente com sprintf() usando a conversão %x (minúsculas) ou %X (maiúsculas), o que costuma ser mais limpo quando você também quer preenchimento:
<?php
echo sprintf('%02X', 255); // FF
?>O Inverso: hexdec()
Para fazer o caminho inverso — de uma string hexadecimal de volta para um inteiro decimal — use hexdec(). As duas funções são inversas:
<?php
echo hexdec(dechex(255)); // 255
?>Quando Usar dechex()
- Gerar ou inspecionar códigos de cor CSS / hex a partir de valores RGB numéricos.
- Produzir hex dumps de dados binários junto com
bin2hex(). - Exibir valores de bitmask ou flags em uma forma compacta e legível.
- Registrar valores de memória ou offset na base que os desenvolvedores esperam.
Para outras bases, o PHP fornece auxiliares equivalentes: decbin() para binário e decoct() para octal, com bindec() e octdec() convertendo de volta.
Conclusão
dechex() transforma um inteiro decimal em uma string hexadecimal em minúsculas, sem prefixo 0x e sem zeros à esquerda. Tenha em mente suas peculiaridades — floats são truncados, negativos tornam-se sem sinal — e use sprintf('%02x', ...) quando precisar de preenchimento. Use-a em conjunto com hexdec() sempre que precisar fazer a conversão de ida e volta entre as duas bases.