gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:23 28 4
gpt4 key购买 nike

我做了一些嵌入式编码,经常需要解析二进制数据包。它们通常很简单,所以我手写了解析器。不幸的是,对于略有不同的协议(protocol),我不得不一遍又一遍地这样做,这很乏味且容易出错。

数据包看起来像这样:

| startByte | size | datadatadata | checksum |

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

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

困难是什么:

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

所以,我的问题是:

  • 我的案例有现成可用的东西吗?
  • 如果没有,我是否应该尝试自己构建它?如果是这样,我应该朝哪个方向思考(例如,词法分析器、解析器生成器或其他东西)?

最佳答案

有一个框架叫redBlocks提供了您正在寻找的东西。它包含一个 component可用于从单个消息定义构建解析器和序列化器:

还有用于CRC计算的组件。

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

关于c++ - 将结构序列化/反序列化为二进制数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26183018/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com