Russian Qt Forum
Ноябрь 23, 2024, 22:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Приём строки в Ascii по tcp  (Прочитано 4990 раз)
azedol
Гость
« : Ноябрь 03, 2010, 13:18 »

Программа написанная на билдере шлёт строку, как показал wireshark в ascii.
QString не хочет воспринимать её.
Так я с эмитировал, то что шлёт та программа:
Код
C++ (Qt)
QString o="same data";
out <<  o.toAscii();
может не совсем и так но очень похоже...

а вот так я принимал до этого:
Код
C++ (Qt)
in >>  ad;

Как правильно обработать входящую строку?
« Последнее редактирование: Ноябрь 25, 2010, 15:26 от azedol » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 03, 2010, 13:26 »

Кодировка какая? Читай про QTextCodec.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
merke
Гость
« Ответ #2 : Ноябрь 03, 2010, 13:39 »

может быть принять всё сначала в QByteArray?
« Последнее редактирование: Ноябрь 03, 2010, 13:40 от Александр » Записан
azedol
Гость
« Ответ #3 : Ноябрь 03, 2010, 15:40 »

спасибо за ответы Улыбающийся

Кодировка какая? Читай про QTextCodec.
кодировка по сути не имеет значения, т.к.в строке цифры

попробую то что предложили

upd:  вроде   QTextCodec помог, по крайней мере с эмуляцией, вечером затесчу прогу

upd2:

при тесте с реальной программой ничего не получилось

вот данные из пакета, которые шлёт программа написанная на билдере:

Код:
0030                     31 20 30 20 31 20 31 20 31 20         1 0 1 1 1 
0040   31 20 30 2c 39 31 33 30 35 20 30 2c 39 31 33 30  1 0,91305 0,9130
0050   35 20 30 2c 39 31 33 30 35 0d 0a                 5 0,91305..

а тот который я эмулировал и нормально принимает вот:


Код:
0030                     00 00 00 23 31 20 31 20 31 20        ...#1 1 1 
0040   30 20 30 20 30 20 30 2c 35 31 31 31 31 20 30 2c  0 0 0 0,51111 0,
0050   39 39 35 35 35 20 30 2c 39 31 35 31 35           99555 0,91515

получается что моя программа принимает данные только если в начале идёт 4 байта "00 00 00 23"  hex

ну и код:
Код
C++ (Qt)
QByteArray encodedString ;
in>>encodedString;
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString  str = codec->toUnicode(encodedString);
 




« Последнее редактирование: Ноябрь 25, 2010, 15:27 от azedol » Записан
crossly
Гость
« Ответ #4 : Ноябрь 03, 2010, 22:36 »

если я правильно понял и in и out это QDataStream... то вам нужно внимательно прочитать документацию по этому классу.. использовать его для приема данных из программы на билдере не стоит..
Записан
azedol
Гость
« Ответ #5 : Ноябрь 04, 2010, 12:48 »

Хорошо, а что тогда использовать?
Записан
merke
Гость
« Ответ #6 : Ноябрь 04, 2010, 13:01 »

Однозначно не использовать QDataStream.

Прочитать в инете какой ByteOrder в delphi. Далее просто читай в QByteArray из сокета методом read();

А далее уже разбирай данные!
Записан
azedol
Гость
« Ответ #7 : Ноябрь 25, 2010, 15:26 »

Спасибо всем Улыбающийся
Решение проблемы:

Код
C++ (Qt)
QByteArray data = pClientSocket->read(BlockSize);
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QString str = codec->toUnicode(data);
« Последнее редактирование: Ноябрь 25, 2010, 15:34 от azedol » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.147 секунд. Запросов: 22.