Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > string2byte


Автор: nerezus 11.9.2005, 18:31
Собственно как, предположим, из строки сделать массив типа byte

..чувствую, что трабла с кодировками будет... предположим, строка cp1251

Автор: Дрон 11.9.2005, 19:16
Сам не проверял, но по идее что-то вроде того:
Код

Encoding enc = Encoding.GetEncoding(1251); 
byte[] arr = enc.GetBytes("Abrakadabra");

и не забыть using System.Text smile

Автор: nerezus 11.9.2005, 20:14
спасибо =)
а обратно ? smile

Автор: Akina 11.9.2005, 20:46
Цитата(nerezus @ 11.9.2005, 19:31)
чувствую, что трабла с кодировками будет

Какая нафиг кодировка в массиве байтов?

Ты опиши всю задачу - чую я, речь о чем-то тривиальном...

Автор: Дрон 11.9.2005, 23:34
Цитата(Akina @ 11.9.2005, 21:46)
Цитата (nerezus @ 11.9.2005, 19:31)
Какая нафиг кодировка в массиве байтов?

Ты опиши всю задачу - чую я, речь о чем-то тривиальном...

nerezus всё очень правильно сказал. Как раз только благодаря тому, что он это сказал я и вспомнил про это решение smile

.NET хранит строки в 16-битном Unicode (правда я не знаю big или little endian). Можно, конечно, попробовать выковырять эти байты напрямую. Типа того:
Код

            string str = "Абракадабра";
            byte[] arr = new byte[str.Length * 2];
            for(int i=0;i<str.Length;i++)
            {
                ushort ch = (ushort)str[i];
                byte b1 = (byte)(ch & (ushort)0x00FF);
                byte b2 = (byte)((ch & (ushort)0xFF00) >> 8);
                arr[i*2] = b1;
                arr[i*2+1] = b2;
            }

Но это очень и очень плохо. Вдруг потом MS переделает формат строки.

Поэтому есть "правильный" способ преобразования. Причём MS учли то, что человеку может понадобится строка в разных кодировках, а не только в Unicode. В итоге одна и та же строка "абракадабра" может отображаться в совершенно разные массивы байтов.
Вот.

Цитата(nerezus @ 11.9.2005, 21:14)
а обратно ? smile

А вот тут ты меня разочаровал smile smile
Неужели самому догадаться сложно??? Я, например, ещё 15 секунд назад не знал решения, но просто проглядев список методов класса Encoding, который выводит Visual Studio увидел, что там есть метод GetString.
Посмотрев на его параметры я увидел, что он принимает как раз массив байтов, а возвращает строку.
В итоге, я пишу этот текст уже раз в 5 дольше, чем занял поиск решения smile

Автор: nerezus 12.9.2005, 11:08
Цитата
А вот тут ты меня разочаровал
и себя тоже: никак от лени не избавлюсь =\ smile smile

Цитата
Ты опиши всю задачу - чую я, речь о чем-то тривиальном...
Код
 TcpClient cli = new TcpClient("ya.ru", 80);
NetworkStream s = cli.GetStream(); 

с NetworkStream пробую работать, там массивы байтов.
Добавлено @ 11:16
З.Ы. протокол не HTTP, WebRequest Class не предлагать smile

Автор: nerezus 12.9.2005, 11:25
спасибо, получилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)