0

私はバイナリファイル形式で作業しています。説明するのがかなり難しいので、これをできるだけ簡単にしようとします。

ファイルに書き込まれるデータ構造には、「ポインター」 (つまり、ファイル内の別の場所にある文字列へのポインター、またはファイル内の別の構造体へのポインター) が含まれる場合があります。「ポインター」のより適切な言葉は次のとおりです。 'offset'、つまり、構造体にはファイル内の文字列の OFFSET が含まれています)。

簡単な例:

struct ExampleStruct {
    public string Text;
    public int Number;
};

「テキスト」文字列メンバーはファイルの先頭に書き込まれ、シリアル化された構造体には含まれません。

したがって、基本的に、構造体はファイル内で次のようになります。

struct ExampleStruct {
    public uint TextLocationOffset;
    public int Number;
};

...'TextLocationOffset' は、文字列 'Text' がファイル内にある場所へのオフセットです。

したがって、それを取得した後、「再配置テーブル」が必要になります。これは、基本的に、ファイル内のデータポインターを指すダブルポインターのリストです。(それは理にかなっていますか?)

したがって、その ExampleStruct を自分のファイルに書き込んでいて、そこに「ポインタ」(TextLocationOffset) が含まれているため、「再配置テーブル」は次のようになります。

public uint TextLocationOffset_LocationOffset;

...'TextLocationOffset_LocationOffset' には、ファイル内の 'TextLocationOffset' の OFFSET が含まれています。

それはすべて意味がありますか?できるだけ単純化しようとしました。

私の問題は、C# のすべてのポインター/ダブル ポインター/再配置をどのように追跡するかということです。私が持っている byte[] 配列には常にデータが追加されているため、オフセットは常に変化します。

これは C++ では簡単です。なぜなら、「再配置」されているものの二重ポインターを取得でき、元の「ポインター」(私の例では「TextLocationOffset」) を正しいオフセットに変更できるからです。 「TextLocationOffset」値の場所を再配置テーブルに追加します。

意味がない場合は申し訳ありません。私は数週間前にこれを尋ねようとしましたが、返事がありませんでした.混乱させているように聞こえるかもしれません.

コードでこれらすべてを追跡する方法が必要なだけです...ヒントはありますか?

PS より完全な例が必要な場合は、喜んで提供させていただきます。:)

4

2 に答える 2

0

データをシリアル化および逆シリアル化する他の方法を検討することをお勧めします。マネージド アプリケーションで再配置とオフセットを追跡することは、非常に例外的なシナリオでない限り、不必要なことです。SO ユーザーは、機能面で何を達成しようとしているのかについて詳しく教えていただければ、より適切にガイドできます。

于 2012-04-27T02:29:13.607 に答える
0

データベース テーブルを使用します。この作業はすべて完了しています。

于 2012-04-27T00:55:13.463 に答える