Je lis des données binaires simples, sans pointeurs, en utilisant des classes C++ sans rembourrage avec le code suivant:La meilleure façon de lire les données binaires en C++ en utilisant des classes sans rembourrage
#include <fstream>
#include <iostream>
using namespace std;
class Data {
public:
int a;
int b;
short int c;
double d;
}__attribute__((packed));
int main() {
Data myData;
ifstream ifs("test.bin", ios::binary);
ifs.read((char *)&myData, sizeof(myData));
ifs.close();
}
J'utilise cette méthode parce que les données peut avoir plus de 20 formats différents et je veux écrire plus de 20 classes différentes pour couvrir tous les formats qui pourraient apparaître. J'ai aussi lu que d'autres options incluent l'utilisation de champs de bits, de directives pragma, et même les routines de sérialisation boost (je ne peux pas parce que je dois utiliser std). Ma question est: est-ce la meilleure façon de lire des données binaires simples en utilisant des classes sans rembourrage? Suggérez-vous une autre alternative? Je voudrais savoir quelle est la méthode la plus sûre et la plus largement utilisée.
Il n'y a pratiquement pas d'autre moyen qui soit aussi simple et efficace. Du moins pas que je sache. Il suffit d'appeler 'Data'' struct' pour bien regarder. – Aneri
Votre approche est bonne. Vous pouvez considérer ['#pragma pack (push, 0)'] (http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html) pour permettre à votre code d'être supporté par plus de compilateurs. Cependant, aucune approche n'est garantie pour être supportée par C++. –
Drew, ça répond vraiment très bien à ma question, j'essaie de trouver quelque chose qui soit compilateur, multi-plateforme, sûr. Pragma_pack est-il plus sûr? Pourriez-vous nous en dire un peu plus à ce sujet? –