Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертация byte[] в string, проблема с пустыми байтами 
V
    Опции темы
Sality123
Дата 30.8.2012, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



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

вот пример.

Код

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

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

 str.Lenght // 8192 

PM MAIL   Вверх
erm0l0v
Дата 30.8.2012, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



Read возвращает сколько байт он записал в массив. Если это число равно btReadBuffer.Length то возможно вы еще не все прочитали из сокета и необходимо еще раз вызвать Read. Именно таким способом вы можете читать данные не длиннющим массивом байт а например массивами по 128 байт а потом объединять их, в там случае у вас в худшем случае в памяти будут 128 лишних байт.
PM MAIL   Вверх
Sality123
Дата 30.8.2012, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Я тоже таким образом выкрутился, но неужели нельзя нормально конвертнуть байты в стринг?
PM MAIL   Вверх
Sality123
Дата 30.8.2012, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Оказывается у метода GetString() есть еще два параметра, с помощю которых можно получить чистенькие данные .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.