Russian Qt Forum

Qt => Вопросы новичков => Тема начата: vorotislav от Январь 19, 2015, 20:27



Название: Разбор последовательность байт
Отправлено: vorotislav от Январь 19, 2015, 20:27
Доброго времени суток.
Есть последовательность байт.
Выглядит примерно так:
02 01 08 00 00 01
Это самый минимальный пакет, который может придти для разбора.
Содержит он в себе следующую информацию:
02 - номер группы объекта
01 - адрес объекта
08 - идентификатор пакета
00 - команда на чтение
00 - с нулевого байта
01 - считать один байт
Вопрос. Как организовать парсинг пакета?
Первая мысль - Идти побайтно
Код:
for (int i = 0; i < arr.size(); i++) { // QByteArray arr;
    switch (arr.at(i)) {
    case 02: {
    //
    }

И вот что дальше делать? Ну хорошо, скажем, запишу я в переменную номер группы, ну и так далее. Каждый байт в свою переменную, скажем int group, address, id, comand, number, count;
А потом дальше строить функцию, который по новой будет обрабатывать эти значения, опять же через свитч?
В общем, мозг мой совсем дальше отказывается соображать. ПРошу вашей помощи.


Название: Re: Разбор последовательность байт
Отправлено: Old от Январь 19, 2015, 20:34
Почитайте про машины состояний, они же конечные автоматы.


Название: Re: Разбор последовательность байт
Отправлено: alex312 от Январь 19, 2015, 22:40
vorotislav, тебе надо определиться с протоколом передачи данных, как одна правильная последовательность байт будет отделятся от другой. Это может быть или специальный символ, либо по времени. Потому как если байтики будут просто сыпатся из порта ты никак не сможеш определить где начало данных. А дальше да, свитч.


Название: Re: Разбор последовательность байт
Отправлено: Bepec от Январь 19, 2015, 22:53
Свичи, состояния (те же свичи вид сбоку), фабрики (опять таки свич только более накрученный) и ещё раз свичи :D


Название: Re: Разбор последовательность байт
Отправлено: __Heaven__ от Январь 20, 2015, 08:08
Для удобства восприятия предлагаю использовать перечисления вместо явных чисел.


Название: Re: Разбор последовательность байт
Отправлено: vorotislav от Январь 20, 2015, 08:21
Спасибо всем! Начал делать разбор, да, использую перечисления. И вроде как пока получается, через свичи, в которых еще свичи. Еще раз всем спасибо!