Miten saan merkkijonojen johdonmukaisen tavuihin perustuvan esityksen C#:ssa määrittelemättä manuaalisesti koodausta?

Miten muunnan merkkijonon byte[]:ksi .NETissä (C#) määrittelemättä manuaalisesti tiettyä koodausta?

Aion salata merkkijonon. Voin salata sen ilman muuntamista, mutta haluaisin silti tietää, miksi koodaus tulee tässä käyttöön.

Miksi koodaus pitäisi ottaa huomioon? Enkö voi yksinkertaisesti saada selville, mihin tavuihin merkkijono on tallennettu? Miksi merkkikoodauksista ollaan riippuvaisia?

Se riippuu merkkijonon koodauksesta (ASCII, UTF-8, ...).

Esimerkiksi:

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

Pieni esimerkki siitä, miksi koodauksella on merkitystä:

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 ei yksinkertaisesti pysty käsittelemään erikoismerkkejä.

Sisäisesti .NET-kehys käyttää UTF-16 merkkijonojen esittämiseen, joten jos haluat yksinkertaisesti saada tarkat tavut, joita .NET käyttää, käytä System.Text.Encoding.Unicode.GetBytes (...).

Katso lisätietoja Character Encoding in the .NET Framework (MSDN).

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