2009-08-31 15 views
2

私はバイナリデータのUDPパケットとこのデータストリームを読み込み、解析して有用な組み込みシステム上で実行されるソフトウェアを吐き出す外部デバイスを持っています。バイナリデータもファイルに記録されます。私は簡単にUDPストリームまたはファイルから直接入力を受け取り、特定のフォーマットにデータを解析し、その出力をファイル(例:matlab datファイル)または別のプロセスに送るパーサーを作成したいと思いますいくつかのリアルタイム処理を行います。私にこれを手伝ってくれるリソースがありますか?そしてこれを進めるにはどうすればよいでしょうか?私はそれがC + +ストリームを使用する意味があるかもしれないと思うが、私はカスタム出力ストリームの作成に慣れていない。これは取る良いアプローチのように思えるか、それとももっと良い方法がありますか?効率的で柔軟なバイナリデータ解析

ありがとうございました。

答えて

4

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

これは解析が不要な点です。

構造体のパッキング規則と構造体のマップをまったく同じようにするエンディアンに注意する必要があります。 Cの "offsetof"と "sizeof"マクロを使うと、あなたの構造が本当にマッピングであると思っているものにマッピングされているかを確認するためのデバッグ情報を出力するのに便利です。

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

+0

お返事ありがとうございます。私はテープキャストを使ってパーシング部分を調べてみましたが、私はそれを好きです。私はまだ実際の入出力を残しています...私はUDPパケットからリアルタイムで、または記録されたデータファイルからデータを取得し、解析されたデータを別のファイルに書き込むか、makeそれは他のいくつかのクラスまたはプロセスにアクセス可能です。 – HazyBlueDot

0

The New Jersey Machine Code Toolkitは、任意の2進パターンを復号する方式です。もともとは、命令セットをデコードするために設計されていましたが、デコードメッセージフォーマットでうまくいくはずです。バイナリ形式の説明を提供し、その形式のフィールドにアクセスするコードを合成します(有効な場合)。フィールドがどこであるか、どのようにコード化されているかについて考えるのではなく、生成された関数呼び出しを使用してメッセージフィールドを参照することができます。

関連する問題