2

バイナリ データの UDP パケットを吐き出す外部デバイスと、このデータ ストリームを読み取って解析し、有用な処理を行う必要がある組み込みシステムで実行されているソフトウェアがあります。バイナリ データもファイルに記録されます。UDPストリームまたはファイルから直接入力を簡単に取得し、データを特定の形式に解析してから、出力をファイル(matlab datファイルなど)または別のプロセスに送信できるパーサーを作成したいと思いますそれはいくつかのリアルタイム処理を行います。これに役立つリソースはありますか? また、これを行う最善の方法は何ですか? C++ ストリームを使用するのは理にかなっていると思いますが、カスタム出力ストリームの作成には慣れていません。これは良いアプローチのように思えますか、それとももっと良い方法がありますか?

ありがとう。

4

2 に答える 2

4

バイナリ データの利点は、一般に非常に固定された形式であることです。これを解析する一般的な方法は、受信したパケットにマップする構造を宣言し、タイプキャストを使用してフィールドを構造要素として読み取ることです。

美しさは、これが解析を必要としないことです。

構造体のパッキング規則と、構造体マップをまったく同じ方法で作成するためのエンディアンに注意する必要があります。C の "offsetof" および "sizeof" マクロを使用すると、デバッグ情報を出力して、構造体がマッピングしていると思われるものに実際にマッピングされていることを確認できます。

パッキング ルールは通常、ディレクティブ (#pragma など) またはコマンド ライン オプションによって変更できます。あなたが立ち往生しているエンディアンネス。組み込みシステムが使用するものと異なる場合は、すべてのフィールドをバイトとして宣言するか、「ntoh」マクロなどを使用してバイトスワッピングを行います。

于 2009-08-31T19:40:44.180 に答える
0

New Jersey Machine Code Toolkitは、任意のバイナリ パターンをデコードするためのスキームです。元々は命令セットをデコードするために設計されましたが、メッセージ形式をデコードするのには十分なはずです。バイナリ形式の説明を提供すると、その形式のフィールドにアクセスするためのコードが合成されます (有効な場合)。したがって、フィールドの場所やエンコード方法を考えるのではなく、生成された関数呼び出しを使用してメッセージ フィールドを参照できます。

于 2009-09-04T03:40:23.077 に答える