Как да получа последователно байтово представяне на низове в C#, без да задавам ръчно кодиране?

Как да конвертирам стринг в байт[] в .NET (C#), без да задавам ръчно конкретно кодиране?

Ще криптирам низа. Мога да го криптирам, без да го конвертирам, но все пак бих искал да знам защо кодирането се намесва тук.

Също така, защо кодирането трябва да се взема предвид? Не мога ли просто да получа в какви байтове е бил съхранен низът? Защо има зависимост от кодирането на символите?

Това зависи от кодирането на вашия низ (ASCII, UTF-8, ...).

Например:

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

Малка извадка защо кодирането има значение:

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 просто не е пригоден да се справя със специални символи.

Вътрешно .NET framework използва UTF-16 за представяне на низове, така че ако просто искате да получите точните байтове, които .NET използва, използвайте System.Text.Encoding.Unicode.GetBytes (...).

За повече информация вижте Кодиране на символи в .NET Framework (MSDN).

Коментари (9)
byte[] strToByteArray(string str)
{
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    return enc.GetBytes(str);
}
Коментари (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);
Коментари (1)