Я не делегирую это кому-либо как работу, но просто хотел получить некоторую идею / помощь в реализации синтаксического анализатора для протокола сообщений, над которым я работаю.У меня есть сообщение, которое отправляется через последовательный COM-порт, так что в основном простой набор байтов только.
+--------------------------------------------------------------+
| MSG HEADER (5 Bytes) | ----- DATA BYTES (varied count) ----- |
+--------------------------------------------------------------+
Это сообщение имеет фиксированные начальные пять байтов для заголовка , который обозначает:
Байт-1: Фиксированный символ заголовка 0x81
Байт-2: Фиксированный символ заголовка 0xFF
Байт-3: Количество слов данных
Байт-4: ID сообщения
Байт-5: Контрольная сумма заголовка
, а затем после этого мы получаем байтов данных .Проблема заключается в том, что байтов данных могут иметь различное количество, но количество этих байтов упоминается в заголовке сообщения , который является третьим байтом.Как я могу написать эффективный парсер, который должен уметь:
- Собирать байты 3, 4 и 5 заголовка сообщения отдельно в переменных
- Затем на основе подсчета данных, т.е.байт 3 заголовка сообщения, он опрашивает последовательный порт до тех пор, пока не будет получено столько байтов
- После получения всех байтов, т. е. при получении полного сообщения, следует обозначать ЗАВЕРШЕНИЕ (возможно, просто указание флага)