【问题标题】:Can Boost Spirit be used to parse byte stream data?Boost Spirit可以用来解析字节流数据吗?
【发布时间】:2010-09-22 01:28:48
【问题描述】:

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

【问题讨论】:

  • 您能否提供有关数据格式的更多详细信息。是不是有些复杂的格式?
  • 我不记得我最初问这个问题时的想法,但它可能与识别 SSL/TLS 标头有关。

标签: c++ parsing stream boost-spirit


【解决方案1】:

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

在我看来,最好使用手动序列化代码处理二进制数据流。 Spirit 更适合于格式良好的语法,例如标记或脚本语言。例如,The Complete Syntax of Lua 在 EBNF 中提供。因此,使用 Spirit 构建自定义解析器可能是有意义的。另一方面,如果 context-free grammar 甚至存在的话,带有同步字节和 CRC 括号消息的专有串行数据链路将需要更多的工作来定义 EBNF。

附录

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

【讨论】:

    【解决方案2】:

    Spirit2 刚刚发布,具有解析二进制文件的功能。 Check out this.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      相关资源
      最近更新 更多