我正在尝试使用ifstream从文件中读取二进制数据。
具体来说,我正在尝试使用从文件中读取的数据填充此"Header"结构体:
struct Header {
char id[16];
int length;
int count;
};
现在,如果我以这种方式读取文件,结果正是我想要的:
input.read((char*)&hdr, sizeof(hdr));
但是如果我手动读取结构体中的每个变量,结果就是无意义的:
input.read((char*)&hdr.id, sizeof(hdr.id));
input.read((char*)&hdr.length, sizeof(hdr.length));
input.read((char*)&hdr.count, sizeof(hdr.count));
我的问题是,这里发生了什么使这两种方法返回不同的结果?
length
和count
,它们怎么定义的?或者,它们应该是hdr.length
和hdr.count
吗? - Chris McGrathsizeof(Header)
要求至少和其成员大小之和一样大,并且在包括实现成员填充时可以更大。当结构体作为整体写入时,成员并不保证彼此相互紧靠,然而你却期望它们是这样的。也就是说,如果你在“写”一个橙子,试图“读”一个桔子袋子不一定会成功。 - WhozCraigsizeof(hdr)
与sizeof()
每个成员进行比较将会有所帮助。 - WhozCraig