Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QByteArray повторение посылки 
:(
    Опции темы
7BON
Дата 30.4.2016, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем Привет) такой вопрос: я отправляю запрос по UART(QByteArray содержится то, что я посылаю). В ответ мне приходит посылка такого рода A0 01 08 77 КС A1 05 08 77 КС А0 05 04 47 КС А1 08 05 78 КС и т.д посылка продолжается(посылка такого рода).
Вопрос: как мне извлечь значения этой посылки: к примеру там где начинается A0 все значения до КС(кс - контрольнная сумма), и после А1 - тоже до КС? При чтении данных я указывал это
Код

void Proverka::readData( QByteArray sh ){
    if ( !myReceive ) return;
    myReceive = false;

    qDebug() << "Read message" <<sh.toHex();

    if(sh[0]==0xA0){
        ostem_az = (( quint16 )( sh.at(2) << 8 ) +
                    ( quint16 )( sh.at(3) & 0x00FF ));//объединение 6 и 7 байта
        kof_az = (quint16) (sh.at(1));
    }
    if(sh[0]==0xA1){
      ostem_ug = ((quint16) (sh.at(2) << 8 ) +
                  (quint16) (sh.at(3) & 0x00FF));
      kof_ug = (quint16)(sh.at(1));
    }

    QString str(sh.toHex());//перевод посылки в строку
    lvArray->setText(str);//отображение посылки в QLIneEdit
}

но он распознает только после первого встречи A1 и A0, а остальные походу даже не рассматривает

Это сообщение отредактировал(а) 7BON - 30.4.2016, 21:18
PM MAIL   Вверх
borisbn
Дата 1.5.2016, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Код

   while ( ! sh.isEmpty() )
    {
        if(sh[0]==0xA0){
            ostem_az = (( quint16 )( sh.at(2) << 8 ) +
                        ( quint16 )( sh.at(3) & 0x00FF ));//объединение 6 и 7 байта
            kof_az = (quint16) (sh.at(1));
            sh.remove( 0, 5 );
            do_something( ostem_az, kof_az );
        }
        else  if(sh[0]==0xA1){
            ostem_ug = ((quint16) (sh.at(2) << 8 ) +
                       (quint16) (sh.at(3) & 0x00FF));
            kof_ug = (quint16)(sh.at(1));
            sh.remove( 0, 5 );
            do_something( ostem_ug, kof_ug );
        }
        else
        {
            sh.remove( 0, 1 );
        }
    }
}



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
7BON
Дата 2.5.2016, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за код(do_something( ostem_az, kof_az ); что это за строка?). Это не помогло(возможно не правильно объяснил, что именно нужно): вот у меня приходят такие данные 
Read message "0eb038a0270ea920a0260ea62ea0270eb73ea0270ead24a0270ead24a0270eb73ea0260ea921a0260eba32a0270eb23ba0260eab23a0260eb73fa0270eb039a0260eb23aa0270ebb32a0260eae26a0270ebe37a0270eb63fa0260eb43ca0270ec74ea0270eb23ba0260eb23aa0260ec64ea0260ebc34a0270ec44da0270ec44da0260ebd35a0270ec841a0260ebe36a0270ebf36a0270eca43a0260ebc34a0260ec54da0270ec54ca0260ebe36a0270ecd44a0270ec34aa0270ec148a0270ecc45a0260ec44ca0260ec840a0270ec54ca0270eca43a0260ed159a0270ecc45a0270ec54ca0270ed55ca0260ec74fa0260ed159a0270ed75ea0260ec64ea0260ed75fa0270ed158a0260ecc44a0270ed950a0270ed65fa0270ed65fa0270ed45da0260eca42a0270edd54a0270ed059a0270ece47a0270ee46da0260ece46a0260ed45ca0270ee26ba0260ecb43a0260eda52a0260ede56a0260ece46a0260eda52a0260ed25aa0260ed35ba0270ed851a0260ed159a0260ede56a0270ed75ea0260ecd45a0260edc54a0260ecf47a0260ed951a0270ede57a0270ecc45a0260ed25aa0260ed951a0260ecd45a0270ecf46a0270ed45da0260ece46a0270ed75ea0270ec148a0270ed25ba0270ed059a0270ec841a0260ecf47a0260ecd45a0270ec148a0270ed158a0260ec149a0270ec841a0270ecd44a026

с устройства. Там есть посылки с A0 и с A1. Мне нужно из вот этого Read message извлечь все данные ну кроме контрольной суммы, A0 и A1. Как это реализовать? 
PM MAIL   Вверх
7BON
Дата 2.5.2016, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сори borisbn, все сработало, спасибо)
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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