Ako získam konzistentnú bytovú reprezentáciu reťazcov v jazyku C# bez toho, aby som ručne zadal kódovanie?

Ako môžem previesť reťazec na byte[] v .NET (C#) bez toho, aby som ručne zadal konkrétne kódovanie?

Reťazec sa chystám zašifrovať. Môžem ho zašifrovať bez konverzie, ale aj tak by som chcel vedieť, prečo tu vstupuje do hry kódovanie.

Taktiež, prečo by sa malo brať do úvahy kódovanie? Nemôžem'jednoducho zistiť, v akých bajtoch bol reťazec uložený? Prečo je tu závislosť od kódovania znakov?

Závisí to od kódovania reťazca (ASCII, UTF-8, ...).

Napríklad:

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

Malá ukážka, prečo je dôležité kódovanie:

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 '?'

ASCII jednoducho nie je uspôsobené na prácu so špeciálnymi znakmi.

Vnútorne rámec .NET používa na reprezentáciu reťazcov UTF-16, takže ak chcete jednoducho získať presné bajty, ktoré používa .NET, použite System.Text.Encoding.Unicode.GetBytes (...).

Viac informácií nájdete v Kódovanie znakov v .NET Framework (MSDN).

Komentáre (9)
byte[] strToByteArray(string str)
{
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    return enc.GetBytes(str);
}
Komentáre (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);
Komentáre (1)