Como obter uma representação consistente de bytes de cordas em C# sem especificar manualmente uma codificação?

Como faço para converter uma string para um byte em .NET (C#) sem especificar manualmente uma codificação específica?

I'vou encriptar a corda. Eu posso criptografá-la sem converter, mas I'ainda gostaria de saber porque a codificação vem para tocar aqui.

Além disso, por que a codificação deve ser levada em consideração? Posso'não posso simplesmente obter em que bytes a string foi armazenada? Por que há uma dependência de codificações de caracteres?

Depende da codificação da sua string (ASCII, UTF-8, ...).

Por exemplo:

byte[] b1 = System.Text.Encoding.UTF8.GetBytes (myString);
byte[] b2 = System.Text.Encoding.ASCII.GetBytes (myString);

Uma pequena amostra do porquê da codificação:

string pi = "\u03a0";
byte[] ascii = System.Text.Encoding.ASCII.GetBytes (pi);
byte[] utf8 = System.Text.Encoding.UTF8.GetBytes (pi);

Console.WriteLine (ascii.Length); //Will print 1
Console.WriteLine (utf8.Length); //Will print 2
Console.WriteLine (System.Text.Encoding.ASCII.GetString (ascii)); //Will print '?'

O ASCII simplesmente não está equipado para lidar com caracteres especiais.

Internamente, o framework .NET utiliza UTF-16 para representar strings, então se você simplesmente quer obter os bytes exatos que o .NET utiliza, utilize System.Text.Encoding.Unicode.GetBytes (...).

Veja Codificação de Caracteres no .NET Framework (MSDN) para mais informações.

Comentários (9)
byte[] strToByteArray(string str)
{
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    return enc.GetBytes(str);
}
Comentários (3)
// C# to convert a string to a byte array.
public static byte[] StrToByteArray(string str)
{
    System.Text.ASCIIEncoding  encoding=new System.Text.ASCIIEncoding();
    return encoding.GetBytes(str);
}

// C# to convert a byte array to a string.
byte [] dBytes = ...
string str;
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
str = enc.GetString(dBytes);
Comentários (1)