2

テキスト データを扱うときは、優れた FileHelpers ライブラリを使用します。これにより、テキスト フィールドをファイルまたはメモリ内文字列からデータを表すクラスに簡単にダンプできます。

ビッグ エンディアンのマイクロコントローラー ベースのシステムを使用する場合、シリアル データ ストリームを読み取る必要があります。非常に限られたマイクロコントローラー プラットフォームでスペースを節約するために、さまざまなマルチバイト型のフィールドを含む生のバイナリ データを書き込む必要があります (基本的には、シリアル ポートから構造体変数をダンプするだけです)。

私は FileHelpers のアーキテクチャが好きです。データを表すクラスを作成し、データをクラスに入れる方法をエンジンに指示する属性でタグ付けします。単一のレコードを表す文字列をエンジンに入力し、データの逆シリアル化された表現を取得できます。ただし、これはオブジェクトのシリアル化とは異なり、生データはまったく区切られておらず、単純なバイナリ固定レコード形式です。

FileHelpers は、表示される null を処理できないため、おそらくそのようなバイナリ データの読み取りには適していません。 * Unicode の問題があると思われます (エンジンは入力を文字列として受け取るため、シリアル ポートからバイトを読み取って変換する必要があります)。データコンバータークラスに移動する前に、それらを Unicode 文字列に変換します)。実験として、バイナリ ストリームを読み取るように設定しましたが、null を送信しないように注意している限り、これまでのところ問題なく動作しています。生データを読み取り、エンディアン形式の問題などを説明する新しいコンバーターをセットアップするのは簡単です。現在、null で失敗し、複数のレコードを処理できません (レコード間に CRLF が必要です)。

私が知りたいのは、FileHelpers と同様に機能するが、バイナリ データを処理するように設計されたオープン ソース ライブラリを誰かが知っているかどうかです。

このタスクを処理するために FileHelpers から何かを派生させることを検討していますが、これを行うために既に利用できるものがあるはずです。

*入力ストリームの null については文句を言わないことがわかりました。Null に問題があると予想していたところに、テスト プログラムに関連のないバグがありました。最初にもう少し深く調査するべきでした!

4

2 に答える 2

0

私はファイルヘルパーを使用したことがないので、直接比較することはできません。ただし、オブジェクトを表すオブジェクトモデルがある場合は、protobuf-netを試すことができます。これは、Googleのコンパクトな「プロトコルバッファ」ワイヤ形式を使用した.NET用のバイナリシリアル化エンジンです。xmlのようなものよりもはるかに効率的ですが、独自のシリアル化コードをすべて記述する必要はありません。

「プロトコルバッファ」に、フィールド間に非常に簡潔なマーカー(通常は1バイト)が含まれていることに注意してください。これにより少しパディングが追加されますが、バージョンの許容範囲が大幅に向上します。「パックされた」データ(つまり、配列からのintのブロック)の場合、必要に応じてこれを省略できます。

つまり、コンパクトな出力が必要な場合は、それが良いかもしれません。特定の出力が必要な場合は、おそらくそれほど必要ではありません。

開示:私は著者なので、偏見があります。しかし、それは無料です。

于 2009-07-27T08:00:56.470 に答える
0

SIRFstarIII バイナリ モードで GPS データをいじっているとき、シリアル モジュールで Python インタラクティブ プロンプトを使用して USB/シリアル ポートからストリームを取得し、構造体モジュールを使用して必要に応じてバイトを変換します (SIRF で定義されたフォーマットごとに)。 )。文字列を変数に読み込んで処理し、結果を表示して、必要に応じて再試行できるため、対話型プロンプトの使用は非常に柔軟です。プロトタイピング段階が終了すると、最終的なプログラムに入れる必要があるデータ形式の文字列が得られます。

あなたの質問には、C# タグがある理由については何も言及されていません。FileHelpers が C# ライブラリであることは理解していますが、どの環境で作業しているかはわかりません。IronPython と呼ばれる .NET 用の Python の実装があります

この答えは、新しい言語を学ばなければならないことを意味するかもしれませんが、インタラクティブなプロンプトを持つことは、すべてのプログラマーにとって非常に強力なツールです。

于 2009-07-30T12:09:40.280 に答える