1
我正在學習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();
這可能嗎?如果不是,有沒有辦法只讀取結構的一個值?
結構不對齊的,所以你應該保持一致, –
有結構成員之間的填充。 'a2'與結構的起始位置偏移4,而不是假設偏移1。使它成爲'file.seekg(offsetof(A,a2),ios :: beg);'。畢竟,閱讀整個結構可能會更容易。 –
二進制文件通常取決於平臺。研究「Endianess」。而且,指針不可移植,特別是在同一個可執行文件的調用之間。 –