我讀簡單的二進制數據,而不會指針,使用C++類沒有填充:最好的方法用下面的代碼讀取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多個不同的類來覆蓋可能出現的所有格式。我還讀到其他選項包括使用位字段,編譯指示,甚至是boost序列化例程(我不能,因爲我必須使用std)。我的問題是:這是使用沒有填充的類讀取簡單二進制數據的最佳方式?你建議有其他的選擇嗎?我想了解什麼是最安全和最廣泛使用的方法。
幾乎沒有其他方式同樣簡單而有效。至少不是我所知道的。爲了好看,只需調用'Data''struct'即可。 – Aneri
你的方法很好。你可以考慮['#pragma pack(push,0)'](http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html),讓你的代碼被更多的編譯器支持。儘管這兩種方法都不能保證被C++支持。 –
德魯,這實際上解決了我的問題,我試圖找到一種編譯器,跨平臺,安全的東西。那麼pragma_pack更安全嗎?你能再詳細一點嗎? –