C++ でバイナリ メッセージを解析する例のライブラリを探しています。ほとんどの人は、バイナリ ファイルまたはソケットで受信したデータの読み取りを要求しますが、デコードする必要があるバイナリ メッセージのセットしかありません。誰かが boost::spirit について言及しましたが、私のニーズに合った適切な例を見つけることができませんでした。
例: 9A690C12E077033811FFDFFEF07F042C1CE0B704381E00B1FEFFF78004A92440
ここで、最初の 8 ビットはプリアンブル、次の 6 ビットはメッセージ ID (0 から 63 までの整数)、次の 212 ビットはデータ、最後の 24 ビットは CRC24 です。
したがって、この場合、メッセージ 26、212 データ ビットからこのデータを取得する必要があります。
- 4 ビット整数値
- 4 ビット整数値
- 0 ~ 63.875 の 9 ビット浮動小数点値。LSB は 0.125 です。
- 4 ビット整数値
編集:ビットレベルで操作する必要があるため、 memcpy は多くのバイトをコピーするため、良い解決策ではありません。最初の 4 ビット整数値を取得するには、バイトから 2 ビットを取得し、次のバイトからさらに 2 ビットを取得し、各ペアをシフトして構成します。私が求めているのは、値を抽出するより洗練された方法です。約 20 の異なるメッセージがあり、それらをビット レベルで解析するための共通のソリューションに到達したかったからです。
等々。
これを簡単に実現できるライブラリを知っていますか?
static_cast が使用されている他の Q/Aも見つけました。私はそれについてグーグルで調べましたが、このアプローチを推奨する人ごとに、エンディアンに関する別の警告があります。私はすでにメッセージを持っているので、そのような警告が私に当てはまるのか、それともソケット通信のためだけなのかはわかりません。
編集: boost:dynamic_bitset は有望に見えます。それを使用する助けはありますか?