私は現在、C++でバイナリファイルを研究しています。構造やクラスをバイナリファイルで読み書きすることについて質問があります。例えば、私は構造のように、構造体をバイナリファイルに保存してC++で値を読み取る
struct A {
char a1;
int a2;
double a3;
};
を持っている。そして、私はコードと構造を保存することができた場合のように、
A a = {'a', 2, 3.5};
ofstream file;
file.open("file.dat", ios::binary);
file.write((char*)&a, sizeof(a));
file.close();
質問があり、私は全体の構造ではない読み取ることができますが、唯一の構造の価値?たとえば、構造体の整数値を読み取る場合、
ifstream file;
int i = 1;
file.open("file.dat", ios::binary);
file.seekg(sizeof(char), ios::beg);
file.read((char*)&i, sizeof(i));
file.close();
これは可能ですか?そうでない場合は、構造体の1つの値だけを読み取る方法はありますか?
あなたがそれを揃える必要がありますので、構造は、構造体のメンバ間のパディングがあります –
、整列していません。 'a2'は構造体の先頭からオフセット4にあり、あなたが想定しているようにオフセット1ではありません。それを 'file.seekg(offsetof(A、a2)、ios :: beg);'にしてください。結局のところ、構造全体を読み込む方が簡単かもしれませんが。 –
バイナリファイルは通常プラットフォームに依存します。 "Endianess"を研究する。また、ポインタは移植可能ではありません。特に、同じ実行可能ファイルの呼び出し間では移植性がありません。 –