Transformando bytes em strings e vice-versa: a magia do código hexadecimal em C#
\n\nVocê já se perguntou como o computador vê uma imagem, música ou até mesmo um arquivo de texto? Tudo isso é apenas uma sequência de bytes. Mas os bytes não são muito convenientes para mostrar ao usuário ou transmitir em uma URL. É aí que entra a string hexadecimal (hex string) — uma representação compacta e legível de dados binários.
\n\nImagine: você está escrevendo um módulo criptográfico, trabalhando com hashes, transmitindo dados binários via JSON ou registrando o conteúdo de um pacote. E então — puf! — você precisa transformar um array de bytes em uma string compreensível. Ou vice-versa, restaurar os bytes originais a partir de uma string hex. Parece familiar? Esta é uma das perguntas mais populares no Stack Overflow, e hoje vamos resolvê-la de uma vez por todas. Bem-vindo ao pythonlib.ru — seu guia no mundo da programação.
\n\nPor que converter byte array em string hex?
\n\nVamos direto ao ponto. Um array de bytes (byte[]) são dados brutos: números de 0 a 255. É difícil para uma pessoa lê-los e, em alguns protocolos de texto (HTTP, JSON), eles podem até quebrar o formato. A string hex resolve ambos os problemas:
\n\n- \n
- Compacidade: um byte se transforma em dois caracteres (por exemplo, 255 → "FF"). \n
- Segurança: a string contém apenas caracteres seguros (0-9, A-F). \n
- Conveniência: strings hex são fáceis de copiar, comparar e registrar. \n
Você provavelmente já viu essas strings em hashes MD5, SHA256 ou em tokens de autorização. Agora você sabe como isso funciona "por baixo dos panos".
\n\nMétodo nº 1: O clássico — BitConverter (simples e rápido)
\n\nA maneira mais popular em C# é usar a classe embutida BitConverter. Ela existe no .NET desde a primeira versão e funciona sem complicações desnecessárias.
Conversão byte[] → string hex
\n\nbyte[] data = { 0x0F, 0x1A, 0xFF, 0x00 };\nstring hexString = BitConverter.ToString(data);\nConsole.WriteLine(hexString); // Saída: 0F-1A-FF-00\n\nSimples, certo? Mas há um detalhe: um hífen é inserido entre os pares de caracteres. Se o hífen te incomoda, é fácil removê-lo:
\n\nstring hexString = BitConverter.ToString(data).Replace("-", "");\nConsole.WriteLine(hexString); // Saída: 0F1AFF00\n\nPrós: mínimo de código, método embutido, fácil para iniciantes.
\nContras: hífen extra (precisa ser removido), pequena alocação de memória para strings intermediárias.
Conversão inversa: string hex → byte[]
\n\nAgora, a operação inversa é um pouco mais complicada. O BitConverter só funciona em uma direção. Mas não desistimos — vamos escrever um parser simples:
\n\npublic static byte[] HexStringToBytes(string hex)\n{\n // Remove possíveis hífens e espaços\n hex = hex.Replace("-", "").Replace(" ", "");\n int length = hex.Length;\n byte[] bytes = new byte[length / 2];\n for (int i = 0; i < length; i += 2)\n {\n bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);\n }\n return bytes;\n}\n\n// Uso:\nstring hex = "0F1AFF00";\nbyte[] result = HexStringToBytes(hex);\n// result: { 0x0F, 0x1A, 0xFF, 0x00 }\n\nEste método usa Convert.ToByte com base 16 — confiável e legível. Mas para arrays grandes, Substring cria muitas strings temporárias. Para código de produção, é melhor usar Span<T> ou um loop com indexação de caracteres.
Método nº 2: Moderno — Convert.ToHexString (.NET 5+)
\n\nA partir do .NET 5, a Microsoft adicionou o tão esperado método Convert.ToHexString. Ele funciona rapidamente e sem hífens.
byte[] data = { 0x0F, 0x1A, 0xFF, 0x00 };\nstring hexString = Convert.ToHexString(data);\nConsole.WriteLine(hexString); // Saída: 0F1AFF00\n\nQue beleza! Sem hífens, sem Replace. E para a operação inversa, existe o Co