NET'te (C#) bir string'i manuel olarak belirli bir kodlama belirtmeden nasıl
byte[]`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.
// 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);