4

C++ プログラムからファイルを読み取れるように、バイナリ ライターがファイルに書き出す方法をカスタマイズする方法はありますか?

例えば:

myBinaryWriter.Write(myInt);
myBinaryWriter.Write(myBool);

そして C++ では:

fread(&myInt, 1, sizeof(int), fileHandle);
fread(&myBool, 1, sizeof(bool), fileHandle);

編集:私が見ることができるように、文字列の長さが1バイトに収まるほど小さい場合、それはそれを書き込む方法です。これは、C ++で読み戻したい場合に悪いことです。

4

2 に答える 2

1

バイナリ互換性を保証したい場合、おそらく c# からの最も簡単な方法は、バイナリ ライターを捨てて、ストリームを使用して自分でバイトを書き込むことです。そうすれば、出力データを完全に制御できます

もう 1 つの方法は、c++/cli を使用してデータを書き込むことができるアセンブリを作成することです。これにより、マネージ コードから c++ との直接的な互換性を得ることができます。

于 2012-07-14T19:03:03.193 に答える
0

選択できるオプションがいくつかあります。

  • 自分でバイト単位で書く。これはおそらく最悪の選択肢です。両方の側 (シリアライズ側とデシリアライズ側) でより多くの作業が必要になります。
  • Protobuf のようないくつかのクロスプラットフォーム シリアライザーを使用します。C# (protobuf-net) や C++ など、ほぼすべてのプラットフォーム用のポートがあります。また、使いやすく、非常に優れたパフォーマンスを発揮します。
  • Struct を使用して、Marshal.PtrToStructure を使用してバイト配列に変換できます (別の方法が必要な場合は、Marshal.StructureToPtr を使用できます)。インターネットにはたくさんの例があります。Managed CPP を使用できる場合は、同じオブジェクトを使用できるため、1 つの場所で構造体を変更すると、両方の場所で変更されます。
  • Managed CPP を使用する場合は、BinaryFormatter などの組み込みのシリアライザーを使用できます...
于 2012-07-14T19:47:27.583 に答える