2008-11-12 59 views
8

Can Spirit(Boost C++库的一部分)用于解析来自流的二进制数据吗?例如,它可以用来将来自套接字的数据解析为结构,字节和单个位标志吗?谢谢!Can Boost Spirit可以用来分析字节流数据吗?

+1

你可以给出更多关于数据格式的细节。它是一些复杂的格式? – 2008-11-12 21:29:29

+0

当我最初提出这个问题时,我不记得我的想法,但它可能与识别SSL/TLS标头有关。 – Brian 2010-07-29 16:14:33

回答

12

Boost Spirit允许使用Extended Backus–Naur Form (EBNF)语法与template meta-programming定义解析器。它非常灵活,并且在解析过程的所有阶段都可以使用抽象类来定制。为了处理二进制数据流,您需要实现自定义扫描器类,因为默认类型是为文本输入量身定制的。您可以在Spirit User's GuideThe Scanner and Parsing部分进一步阅读。

在我的愚见,二进制数据流最好用手动序列化代码来处理。 Spirit更多地面向格式良好的语法,如标记语言或脚本语言。例如,EBNF提供了The Complete Syntax of Lua。因此,使用Spirit构建自定义分析器可能是有意义的。另一方面,具有同步字节和CRC包围消息的专有串行数据链路如果仅仅为了定义EBNF,就需要更多的工作,如果其中还存在context-free grammar

附录

The latest version of Boost Spirit includes functionality for dealing with binary data.

相关问题