2

我有一个外部设备,它吐出二进制数据的 UDP 数据包和在嵌入式系统上运行的软件,需要读取这个数据流,解析它并做一些有用的事情。二进制数据也被记录到文件中。我想编写一个解析器,它可以轻松地直接从 UDP 流或文件中获取输入,将数据解析为特定格式,然后将输出定向到文件(例如 matlab dat 文件)或另一个进程这将进行一些实时处理。是否有任何资源可以帮助我解决这个问题,最好的方法是什么?我认为使用 C++ 流可能有意义,但我不熟悉创建自定义输出流。这似乎是一种很好的方法,还是有更好的方法?

谢谢。

4

2 回答 2

4

二进制数据的美妙之处在于它通常具有非常固定的格式。解析它的一种典型方法是声明一个映射到接收到的数据包的结构,然后仅使用类型转换将字段作为结构元素读取。

美妙的是,这不需要解析。

您必须小心结构打包规则和字节序,以使结构映射完全相同。使用 C 中的“offsetof”和“sizeof”宏有助于发出一些调试信息,以检查您的结构是否确实映射到您认为它正在映射的内容。

打包规则通常可以通过指令(例如#pragma's)或命令行选项进行更改。你坚持使用字节序。如果它与您的嵌入式系统使用的不同,请将所有字段声明为字节,或使用“ntoh”宏之类的东西来进行字节交换。

于 2009-08-31T19:40:44.180 回答
0

New Jersey Machine Code Toolkit是一种用于解码任意二进制模式的方案。它最初是为解码指令集而设计的,但它应该可以很好地用于解码消息格式。您提供二进制格式的描述,它合成代码以访问该格式的字段(有效时)。因此,您可以使用生成的函数调用来引用消息字段,而不是考虑字段的位置或编码方式。

于 2009-09-04T03:40:23.077 回答