3

データの保存方法も定義する必要がある場合、バイナリでファイルにデータを読み書きするにはどうすればよいですか?
単純なデータ構造をバイナリ形式でファイルに保存しようとしています。

たとえば、次のような構造体のベクトルがあります。

struct Vertex
{
    x;
    y;
    z;
}

std::vector<Vertex> vertices;

このベクトルをバイナリ形式でファイルに保存したいと考えています。

データを処理するためにオーバーロードできるand演算子ifstreamostream使用して出力する方法は知っていますが、バイナリを出力することはできません。<<>>

.write() を使用してバイナリで書き込む方法も知っていますが、データを処理するために必要なものをオーバーロードする方法が見つからないという問題があります。

4

3 に答える 3

1

それを行う 1 つの方法 (必ずしも最善であるとは限りません) は、選択したバイナリ書き込み関数を使用してデータを書き込むことです。

write(fd,data,size);

ただし、「データ」を構造体として渡します。

例えば

Vertex data;
data.x = 0;
etc...
write(fd,(char*)&data,sizeof(data));

構造体を文字の配列として扱い、それらをファイルに書き込みます。それを読み戻すと、上記の逆になります。

ベクトル (動的に割り当てられ、メモリ内の奇妙な場所に奇妙なものがある) を使用してこれを行う良い方法はないことに注意してください。そのため、構造体の配列をお勧めします。

于 2013-05-02T15:16:50.733 に答える