J'étudie le fichier binaire en C++ de nos jours. J'ai une question sur la lecture et l'écriture de structure ou de classe dans un fichier binaire. Par exemple, si j'ai une structure comme,Enregistrement de la structure dans un fichier binaire et lecture seule de la valeur en C++
struct A {
char a1;
int a2;
double a3;
};
Et puis je peux sauver une structure avec le code comme,
A a = {'a', 2, 3.5};
ofstream file;
file.open("file.dat", ios::binary);
file.write((char*)&a, sizeof(a));
file.close();
La question est, puis-je pas lu toute la structure, mais seulement la valeur dans la structure? Par exemple, si je veux lire la valeur entière de la structure, alors,
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();
Est-ce possible? Si ce n'est pas le cas, y a-t-il un moyen de lire seulement une valeur de la structure?
la structure n'est pas alignée, vous devez donc aligner, –
Il y a rembourrage entre les membres de la structure. 'a2' est à un décalage 4 du début de la structure, pas décalé 1 comme vous le supposez. Faites-le 'file.seekg (offsetof (A, a2), ios :: beg);'. Bien qu'il soit probablement plus facile de simplement lire toute la structure, après tout. –
Les fichiers binaires dépendent généralement de la plateforme. Recherche "Endianess". De même, les pointeurs ne sont pas portables, en particulier entre les invocations du même exécutable. –