Как преобразовать строку в байтовый массив в .NET? - PullRequest
70 голосов
/ 28 октября 2008

У меня есть строка, которую мне нужно преобразовать в эквивалентный массив байтов в .NET.

Это должно быть легко, но у меня болит мозг.

Ответы [ 4 ]

95 голосов
/ 28 октября 2008

Вам нужно использовать кодировку (System.Text.Encoding), чтобы сообщить .NET, что вы ожидаете получить. Например, в UTF-16 (= System.Text.Encoding.Unicode) :

var result = System.Text.Encoding.Unicode.GetBytes(text);
41 голосов
/ 28 октября 2008

Сначала определите, какую кодировку вы хотите: вам нужно немного узнать о Unicode .

Следующая работа, которой System.Text.Encoding соответствует. Моя Базовая .NET refcard описывает большинство распространенных и как получить экземпляр (например, с помощью статического свойства Encoding или путем вызова Encoding.GetEncoding.

Наконец, определите, хотите ли вы, чтобы все байты были одновременно (это самый простой способ - вызовите Encoding.GetBytes (string) один раз, и все готово) или вам нужно разбить это в куски - в этом случае вы захотите использовать Encoding.GetEncoder , а затем кодировать немного за раз. Кодировщик заботится о сохранении состояния между вызовами на случай, если вам нужно разорвать, например, половину символа.

18 голосов
/ 28 октября 2008

Какую кодировку вы используете? У Конрада все в порядке, но есть и другие, и вы можете получить глупые результаты с неправильным:

byte[] bytes = System.Text.Encoding.XXX.GetBytes(text)

Где XXX может быть:

ASCII
BigEndianUnicode
Default
Unicode
UTF32
UTF7
UTF8
8 голосов
/ 28 октября 2008

Как это:

    string test = "text";
    byte[] arr = Encoding.UTF8.GetBytes(test);
...