将结构序列化/反序列化为二进制数据包

时间:2014-10-03 16:32:55

标签: c++ sockets serialization embedded

我做了一些嵌入式编码,经常需要解析二进制数据包。 它们通常很简单,所以我手工编写了解析器。不幸的是,我必须一遍又一遍地使用稍微不同的协议,这些协议很枯燥且容易出错。

数据包看起来像这样:

| startByte | size | datadatadata | checksum |

数据可以拥有自己的结构(我也希望序列化)。

所以我想,也许有一些简单的方法可以做到这一点? 理想情况下,我希望能够在类中编写数据包格式,创建该类的对象并将其序列化为缓冲区。当然,并将其反序列化。

有什么困难:

  • 数据包可能具有不同的长度(但长度是数据包中的字段或常量)。
  • 数据包包含一些必须计算的字段(如CRC或校验和)。
  • 数据包每次收到一个字节并且可能已损坏,因此反序列化应该能够找到有效的数据包。
  • 它是微控制器的嵌入式代码,因此我不受限于C ++而没有花哨的东西(比如Boost或来自标准库的重类)。

所以,我的问题是:

  • 我的案件有什么可以随时使用的吗?
  • 如果没有,我应该自己尝试构建吗?如果是这样,我应该在哪个方向思考(如词法分析器,解析器生成器或其他东西)?

1 个答案:

答案 0 :(得分:0)

有一个名为redBlocks的框架可以满足您的需求。它包含一个component,可用于从单个消息定义构建解析器和序列化器:

还有用于CRC计算的组件。

该库需要C ++,适用于嵌入式应用程序。