Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2009, 11:41   #1
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию Работа с классом TStringStream в Borland C++

Раньше я никогда не работал с этим классом в Borland C++ 6.0, но вот настало время. Дан текст типа: длина_ника+3_байта_отступа+ник+3_ба йта_отступа+IP+длина_названия_канал а+3_байта_отступа+название_канала+д лина_сообщения+3_байта_отступа+сооб щение.
Примерный вид такой:
Код:
    »»»VIRUS«««	   127.0.0.1   main   h
. Длина ника и канала-это число переведенно в ASCII-символ(в данном случае не отображается соответствующий символ т.е. как различия в кодировках). Вот я написал функцию для обработки сообщения:

Код:
void InMsgToChannel(BYTE * bMessage, DWORD dwMessageLength)
{
        AnsiString user_name,user_ip,channel,text;
        int i,*pi=&i,l;

        TStringStream *msg=new TStringStream((char*)bMessage);
        msg->Size=dwMessageLength;
        msg->Read(pi,4);
        user_name=msg->ReadString(i);
        msg->Read(pi,4);
        user_ip=msg->ReadString(i);
        msg->Read(pi,4);
        channel=msg->ReadString(i);
        msg->Read(pi,4);
        text=msg->ReadString(i);

        ShowMessage(user_name+","+user_ip+","+channel+","+text);
}
Но она не работает. Вопрос: как правильно с помощью класса TStringStream разложить и прочитать данное сообщение?.

Последний раз редактировалось profi; 25.07.2009 в 11:46.
profi вне форума Ответить с цитированием
Старый 25.07.2009, 14:01   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Может я ошибаюсь, не работал с BC++ 6, но ИМХО вы неправильный параметр передаёте в метод Read класса TStringStream
Код:
  int i,*pi=&i,l;
  ...
  msg->Read(pi,4);
По-моему более логично передавать указатель на буффер(строку), а не на целое.
Код:
  char buffer[10];
  ...
  msg->Read(buffer, 4);
netrino вне форума Ответить с цитированием
Старый 26.07.2009, 20:14   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Задачу решил. Можете тему закрыть.
profi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки и работа с файлами на Borland C++ 3.1 CePryH Помощь студентам 6 16.06.2009 16:37
Работа со строками в Borland C++ SL1M_DOGG Помощь студентам 1 08.06.2009 15:36
C++ работа с классом VadEr Помощь студентам 2 17.05.2009 12:33
TStringstream VS Tstringlist Lich Работа с сетью в Delphi 2 06.01.2009 10:54
кто нибудь знаком с классом? BESS Microsoft Office Word 1 10.08.2008 12:15