2012-04-27 15 views
0

私はバイナリファイル形式で作業しています。説明が難しいので、できるだけシンプルにしようとします。ファイル内のデータ参照/ポインタの処理?

ファイルに書き込まれるデータ構造には、 'ポインタ'(つまり、ファイル内の別の場所にある文字列へのポインタ、またはファイル内の別の構造体へのポインタ)が含まれている可能性があります。ポインタ 'は' offset 'になります。つまり、構造体にはファイル内の文字列のOFFSETが入ります)。

簡単な例:

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

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

ので、基本的に、構造体は、ファイルに次のようになります。

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

を...「TextLocationOffsetは、」文字列「テキスト」がファイル内に配置されている場所へのオフセットです。

私はそれを持ってから、 "再配置テーブル"を必要とします - 本質的にファイル内のデータポインタを指すダブルポインタのリストです。私は私のファイルにExampleStructことを書いた、そしてそれはポインタ '(TextLocationOffset)が含まれているため(?理にかなっているん)

をので、私の「再配置テーブルには、」で構成されます:

public uint TextLocationOffset_LocationOffset; 

。 .. 'TextLocationOffset_LocationOffset'には、ファイル内の 'TextLocationOffset'のオフセットが含まれます。

すべて意味がありますか?私は可能な限り簡素化しようとしました。

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

私は '再配置'されているもののダブルポインタを得ることができるので、これは簡単です。次に、元の 'ポインタ'(私の例では 'TextLocationOffset')を正しいオフセットに変更できます。私は 'TextLocationOffset'値の位置を見つけて、それを私の再配置テーブルに追加することができます。

申し訳ありませんが、それは意味をなさない。私は数週間前にこれを聞いてみましたが、返事はありませんでした。

私はちょうど私のコードのこれらのすべてを追跡する方法が必要...任意のヒント?

P.S.より徹底した例が必要な場合は、私が提供してくれることを喜んでお勧めします:)

+0

[バイナリファイル形式 - データ '再配置'の可能な複製?](http:// stackoverflow。com/questions/10183384/binary-file-format-data-relocations) – user7116

答えて

0

すべての作業が完了しました。

0

データをシリアライズおよびデシリアライズする他の方法を調べることができます。非常に例外的なシナリオがない限り、管理対象アプリケーションでの再配置とオフセットの追跡は不要です。あなたが機能面で達成しようとしていることについてもっと詳しく知っていれば、SOのユーザーはあなたをより良く導くことができます。

+0

実際には3Dゲームのバイナリファイル形式です。ファイルにはテクスチャ、アイコン、テキストストリングなどの「構造」が含まれています。ファイルの先頭には、構造データのエントリポイントへのオフセットを含むデータ「識別子」があります。私は、各構造体のファイルオフセットを含む "Location"構造体を持つ解決策を考え出しました。これはうまくいくようです。私はちょうどこれを行う簡単な方法があるかどうか疑問に思っていた。 :) – Alex

関連する問題