所以,我得到了这些数据.从网络套接字,或从文件中.我正在拼凑将解释数据的代码.读取一些字节,检查一些标志,一些字节表示后面有多少数据.读入那么多数据,冲洗,重复.
这个任务让我想起解析源代码.我对lex/yacc和antlr很满意,但他们不能胜任这项任务.你不能将比特和原始字节指定为标记(好吧,也许你可以,但我不知道如何),你不能把它们哄成"读取两个字节,使它们成为无符号的16位整数,称之为n,然后读取n个字节."
然后,当以系统方式定义协议/数据格式的规范(并非所有规范都是)时,应该有一种系统的方式来读取根据协议格式化的数据.对?
必须有一个工具来做到这一点.
有没有关于如何在C中读取和解析二进制数据的库或指南?
我在看一些功能将在网络套接字接收TCP数据包,然后根据规范解析二进制数据,由转码中的信息成为一个更可用的形式.
是否有任何图书馆可以做到这一点,甚至是执行此类事情的入门书?
我正在寻找在C++中解析二进制消息的任何示例库.大多数人要求读取二进制文件或在套接字中接收的数据,但我只需要解码一组二进制消息.有人提到了boost :: spirit,但我找不到合适的例子来满足我的需求.
例如:9A690C12E077033811FFDFFEF07F042C1CE0B704381E00B1FEFFF78004A92440
其中前8位是前同步码,接下来是6位msg ID(0到63之间的整数),接下来的212位是数据,最后24位是CRC24.
所以在这种情况下,msg 26,我必须从212个数据位获取这些数据:
编辑:我需要在位级操作,因此memcpy不是一个好的解决方案,因为它复制了许多字节.要获得第一个4位整数值,我应该从一个字节获得2位,从下一个字节获得另外2位,移位每一对并组成.我要求的是一种更优雅的方法来提取值,因为我有大约20种不同的消息,并希望达到一个通用的解决方案来解析它们的位级别.
等等.
你知道os可以轻松实现这个吗?
我还发现了其他使用static_cast的Q/A. 我用Google搜索,并且对于推荐这种方法的每个人,还有另一个关于端序的警告.由于我已经有了我的消息,我不知道这样的警告是否适用于我,或者只是用于套接字通信.
编辑:提升:dynamic_bitset看起来很有希望.任何使用它的帮助?