次のコードをパディングせずに C++ クラスを使用して、ポインターなしで単純なバイナリ データを読み取っています。
#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();
}
データには 20 以上の異なる形式があり、表示される可能性のあるすべての形式をカバーするために 20 以上の異なるクラスを記述したいため、このメソッドを使用しています。また、他のオプションには、ビットフィールド、プラグマディレクティブ、さらにはブーストシリアル化ルーチンの使用が含まれていることも読みました (std を使用する必要があるため、できません)。私の質問は:これは、パディングなしでクラスを使用して単純なバイナリ データを読み取るための最良の方法ですか? 他の代替案はありますか?最も安全で広く使われている方法を知りたいです。