Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Конвертация byte[] в string


Автор: Sality123 30.8.2012, 02:20
Всем привет. Как мне известно разрабы Дотнета неудосужелись сделать по человечески чтение из сокета, а в частности мы должны угадывать сколько данных для чтения есть в сокете, приходится наугад создавать огромный буфер байт и читать туда из сокета. Если данных меньше чем величина буфера, остальные байты заполненые какимито неизвесныме мне символами или нулями, от которых я не магу избавится. Они не попадают под уничтожение функции Split, при проверке величины буфера buff.Lenght показываетполную величину буфера, который я обьявлял, а не которые заполнились из сокета. Вобщем я не магу работать с этим буфером нормально 

вот пример.

Код

byte[] btReadBuffer = new byte[8192];
stream.Read(btReadBuffer, 0, btReadBuffer.Length);
string str    = Encoding.ASCII.GetString(btReadBuffer);

// с сокета пришло допустим 40 байт

 str.Lenght // 8192 

Автор: erm0l0v 30.8.2012, 12:05
Read возвращает сколько байт он записал в массив. Если это число равно btReadBuffer.Length то возможно вы еще не все прочитали из сокета и необходимо еще раз вызвать Read. Именно таким способом вы можете читать данные не длиннющим массивом байт а например массивами по 128 байт а потом объединять их, в там случае у вас в худшем случае в памяти будут 128 лишних байт.

Автор: Sality123 30.8.2012, 12:30
Я тоже таким образом выкрутился, но неужели нельзя нормально конвертнуть байты в стринг?

Автор: Sality123 30.8.2012, 19:30
Оказывается у метода GetString() есть еще два параметра, с помощю которых можно получить чистенькие данные .

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