Spirit (Boost C++ ライブラリの一部) を使用して、ストリームからのバイナリ データを解析できますか? たとえば、ソケットからのデータを構造体、バイト、および個々のビット フラグに解析するために使用できますか? ありがとう!
2 に答える
Boost Spirit では、拡張バッカスナウアー形式 (EBNF)構文とテンプレート メタプログラミングを使用してパーサーを定義できます。非常に柔軟で、カスタマイズ可能な解析プロセスのすべてのフェーズで抽象クラスを使用します。デフォルトのタイプはテキスト入力用に調整されているため、バイナリ データ ストリームを処理するには、カスタム スキャナ クラスを実装する必要があります。詳細については、 Spirit ユーザー ガイドのスキャナーと解析セクションを参照してください。
私の謙虚な意見では、バイナリ データ ストリームは、手巻きのシリアライゼーション コードで処理するのが最適です。Spirit は、マークアップ言語やスクリプト言語のような整形式の文法を対象としています。たとえば、Lua の完全な構文はEBNF で提供されます。したがって、Spirit を使用してカスタム パーサーを構築することは理にかなっているかもしれません。一方、同期バイトと CRC ブラケット メッセージを使用した独自のシリアル データ リンクでは、EBNF を定義するためだけに、文脈自由文法が存在する場合でも、さらに多くの作業が必要になります。
補遺
リリースされたばかりの Spirit2 には、バイナリを解析する機能があります。これをチェックしてください。