Итак, я получаю эти данные. Из сетевого сокета или из файла. Я собираю код, который будет интерпретировать данные. Прочитайте несколько байтов, проверьте некоторые флаги, и некоторые байты указывают, сколько данных следует. Прочитайте много данных, промойте, повторите.
Эта задача очень сильно напоминает синтаксический анализ исходного кода. Я совместим с lex/yacc и antlr, но они не справляются с этой задачей. Вы не можете указывать биты и необработанные байты как токены (ну, может быть, вы могли бы, но я не знал бы, как это сделать), и вы не можете уговорить их "читать два байта, превратить их в неподписанное 16-битное целое число, называть его n, а затем прочитайте n байтов.".
Затем снова, когда спецификация формата протокола/данных определяется систематическим образом (не все из них), должен быть систематический способ чтения данных, отформатированных в соответствии с протоколом. Правильно?
Там должен быть инструмент, который делает это.