Manuel olarak bir kodlama belirtmeden C#'ta dizelerin tutarlı bir bayt gösterimini nasıl elde edebilirim?

NET'te (C#) bir string'i manuel olarak belirli bir kodlama belirtmeden nasılbyte[]`a dönüştürebilirim?

Dizeyi şifreleyeceğim. Dönüştürmeden şifreleyebilirim, ancak yine de kodlamanın neden burada devreye girdiğini bilmek istiyorum.

Ayrıca, kodlama neden dikkate alınmalıdır? Dizenin hangi baytlarda depolandığını basitçe alamaz mıyım? Neden karakter kodlamalarına bağımlılık var?

Bu, dizenizin kodlamasına bağlıdır (ASCII, UTF-8, ...).

Örneğin:

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

Kodlamanın neden önemli olduğuna dair küçük bir örnek:

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 basitçe özel karakterlerle başa çıkacak donanıma sahip değildir.

Dahili olarak, .NET çerçevesi dizeleri temsil etmek için UTF-16 kullanır, bu nedenle sadece .NET'in kullandığı tam baytları almak istiyorsanız, System.Text.Encoding.Unicode.GetBytes (...) kullanın.

Daha fazla bilgi için NET Framework'te Karakter Kodlama (MSDN) bölümüne bakın.

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