Вопрос

У меня есть внешнее устройство, которое выплевывает пакеты UDP бинарных данных и программного обеспечения, работающего на встроенной системе, которая должна прочитать этот поток данных, разрабатывать их и сделать что -то полезное. Двоичные данные также регистрируются в файле. Я хотел бы написать анализатор, который может легко взять вход непосредственно из потока UDP или файла, разобрать данные в определенный формат, а затем направить вывод в файл (например, файл DAT Matlab) или в другой процесс Это сделает некоторую обработку в реальном времени. Есть ли какие -либо ресурсы, которые помогут мне с этим, и как лучше всего это сделать? Я думаю, что может иметь смысл использовать потоки C ++, но я не знаком с созданием пользовательских выходных потоков. Это кажется хорошим подходом, или есть лучший способ сделать это?

Спасибо.

Это было полезно?

Решение

Красота бинарных данных в том, что он обычно имеет очень фиксированный формат. Типичный метод анализа-это объявление структуры, которая отображается на полученных пакетах, а затем просто использовать критерии типов для чтения полей в качестве элементов структуры.

Красота в том, что это не требует анализа.

Вы должны быть осторожны с правилами упаковки структуры и эндсианам, чтобы структура была одинаковой. Использование макросов C «смещение» и «размер» полезно для излучения некоторой информации отладки, чтобы убедиться, что ваша структура действительно отображается с тем, что, по вашему мнению, это отображение.

Правила упаковки обычно могут быть изменены либо директивами (например, #Pragma) или параметрами командной строки. Эндин, ты застрял. Если он отличается от того, что использует ваша встроенная система, объявите все поля в качестве байтов или используйте что -то вроде макроса «NTOH» для обмена байтом.

Другие советы

Инструментарий машинного кода в Нью -Джерси является схемой декодирования произвольных двоичных моделей. Первоначально он был разработан для декодирования наборов инструкций, но это должно быть просто в порядке для декодирования форматов сообщений. Вы предоставляете описание бинарного формата, он синтезирует код для доступа к полям этого формата (когда действителен). Таким образом, вы можете обратиться к полям сообщений, используя сгенерированные вызовы функций, а не думать о том, где находится поле или как оно кодируется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top