Transformando string em array de bytes em C#: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Strings» e «bytes»: por que isso é uma eterna dor de cabeça para o programador?

\n

Imagine a situação: você está escrevendo uma aplicação de rede em C#, enviando dados para o servidor, e no final — uma bagunça de caracteres. Ou criptografa uma senha, e do outro lado não conseguem descriptografá-la. Familiar? A raiz do problema muitas vezes está na conversão incorreta de string para array de bytes (e vice-versa).

\n

A pergunta «Converting string to byte array in C#» no Stack Overflow acumulou milhares de visualizações não por acaso. Esta é a base que sustenta o trabalho com arquivos, criptografia, serialização e comunicação em rede. Sem entender este tópico, você vai pisar nos mesmos erros repetidamente. Vamos de uma vez por todas entender como fazer isso corretamente.

\n\n

Por que não podemos simplesmente converter uma string em bytes?

\n

A abordagem ingênua — usar BitConverter.GetBytes() para um caractere? Não. O problema é que a string é uma abstração composta por caracteres (char, 2 bytes em C#). Já o array de bytes são dados brutos que dependem da codificação.

\n

O mesmo caractere «A» na codificação UTF-8 ocupa 1 byte, no UTF-16 — 2 bytes, e no UTF-32 — 4 bytes. Se você escolher a codificação errada, os dados serão perdidos. Lembre-se da regra principal: sempre especifique a codificação explicitamente.

\n\n

O método mais popular: Encoding.UTF8.GetBytes()

\n

Isso é o que você usará em 90% dos casos. UTF-8 é o padrão de facto para a web, JSON e a maioria das APIs.

\n\n
using System;\nusing System.Text;\n\nclass Program\n{\n    static void Main()\n    {\n        string original = "Olá, mundo! 🌍";\n        \n        // Converte a string em um array de bytes (UTF-8)\n        byte[] utf8Bytes = Encoding.UTF8.GetBytes(original);\n        \n        // Conversão reversa (para verificação)\n        string restored = Encoding.UTF8.GetString(utf8Bytes);\n        \n        Console.WriteLine($"String original: {original}");\n        Console.WriteLine($"Array de bytes (tamanho {utf8Bytes.Length}): {BitConverter.ToString(utf8Bytes)}");\n        Console.WriteLine($"String restaurada: {restored}");\n    }\n}
\n\n

Resultado da execução:

\n
String original: Olá, mundo! 🌍\nArray de bytes (tamanho 18): D0-9F-D1-80-D0-B8-D0-B2-D0-B5-D1-82-2C-20-D0-BC-D0-B8-D1-80-21-20-F0-9F-8C-8D\nString restaurada: Olá, mundo! 🌍
\n\n

Observe: o emoji «🌍» ocupa 4 bytes (F0-9F-8C-8D). O UTF-8 consegue trabalhar com qualquer caractere Unicode, ao contrário de codificações obsoletas.

\n\n

Outras codificações populares

\n
    \n
  • Encoding.ASCII — apenas caracteres de 7 bits (0-127). Para cirílico ou caracteres especiais não serve — tudo acima de 127 se transforma em '?'
  • \n
  • Encoding.Unicode (também conhecido como UTF-16LE) — usado internamente no C# para armazenar strings. Cada caractere ocupa 2 bytes (ou 4 para pares substitutos).
  • \n
  • Encoding.UTF32 — cada caractere ocupa exatamente 4 bytes. Consome muitos recursos, mas é previsível.
  • \n
  • Encoding.Default — codificação do sistema (ANSI). Evite! Ela é diferente em computadores diferentes.
  • \n
\n\n

Conversão usando BitConverter e MemoryStream

\n

Às vezes é necessário obter a representação "bruta" da string como um array de caracteres (char). Isso não é o mesmo que bytes em uma codificação, mas pode ser útil para trabalho de baixo nível.

\n\n
string text = "C#";\n// Obtém o array de char\nchar[] chars = text.ToCharArray();\n// Converte cada char em 2 bytes (Little-Endian)\nbyte[] rawBytes = new byte[chars.Length * sizeof(char)];\nBuffer.BlockCopy(chars, 0, rawBytes, 0, rawBytes.Length);\n\nConsole.WriteLine(BitConverter.ToString(rawBytes)); // 43-00-23-00
\n\n

Este método produz um array na codificação UTF-16LE (como é armazenado na memória). Use-o apenas se você souber exatamente o que está fazendo.

\n\n

Caso especial: Base64

\n

Se

Blogs

Book Recommendations