2008-11-12 31 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.

相關問題