1

「バイナリ シリアライザー/デシリアライザー コード ジェネレーター」と呼ぶものを探しています。具体的には、任意のビット長でオンザワイヤ フォーマットを指定し、必要な C/C++ を生成できる、より適切な用語がないためです。その形式でパケットをパック/アンパックするコード。私はビットフィールドを持つ構造体を使用する道を歩み始めましたが、この投稿を読んだ後、すべての厄介な問題を処理する何かがすでにそこにあるのではないかと思っています. 対処する必要があるデータ構造の例:

struct header {
    unsigned int val1 : 8;
    unsigned int val2 : 24;
    unsigned int val3 : 16
    unsigned int val4 : 2;
    unsigned int val5 : 3;
    unsigned int val6 : 1;
    unsigned int val7 : 10;
}

データ構造のフィールドをそのように保持する動機は、プログラマーがプロトコルで一致するものに基づいてフィールドを設定/取得しやすくすることです。val5 は、意味のある 3 ビット フラグである可能性があります。はい、構造体全体に対して 2 つの 32 ビット値を持つことができ、すべてを追跡するためにビット マスクなどを使用する必要がありますが、なぜですか?

Google Proto Buf などのことは知っていますが、私の知る限り、これらはすべてプログラマー側のデータ構造に焦点を当てており、特定のビット パターンを指定することはできません。バイナリ ワイヤ形式は、その指定方法です。私が見つけた最も近いものはprotlrで、FOSSのように見えないことを除けば素晴らしい音です。SO に関する他の投稿は次のとおりです。

  • 本格的な組み込みフレームワークの一部のように見えるRedBlocks 。
  • 私のニーズに対して非常に古く、過度に複雑に見えるPADS 。
  • 興味深いように聞こえるが、それを使用して任意のビット長(1ビット、2ビット、17ビットフィールドなど)を解析する例や、一方向の逆シリアル化に焦点を当てているように見えるため、シリアル化方法もある場合は見つかりません侵入検知用。

さらに別のシリアライゼーション形式をローリングする以外に、私の基準を満たす FOSS の代替手段はありますか、または上記の構造のこれらの参照の 1 つを使用して例を提供できますか?

4

1 に答える 1