我在写入/读取二进制值时遇到了一个“奇怪”的问题:
bool readHeader(std::fstream &file)
{
file.seekg(0);
int a = file.tellg();
file.get(reinterpret_cast<char*>(&a), sizeof(a));
int b = file.tellg();
file.get(reinterpret_cast<char*>(&b), sizeof(b));
int c = file.tellg();
file.seekg(32);
return !(file.bad());
}
bool writeHeader(std::fstream &file)
{
file.seekg(0);
int a = file.tellg();
file.write(reinterpret_cast<char*>(&a), sizeof(a));
int b = file.tellg();
file.write(reinterpret_cast<char*>(&b), sizeof(b));
int c = file.tellg();
file.seekg(32);
return !(file.bad());
}
其中“a”是 uint32_t,“b”是 uint64_t。
这里有什么奇怪的 - 变量 a、b 和 c 具有以下值:
在 readHeader: 0, 3, 10
在 writeHeader: 0, 4, 12
而这个原因,我将不得不做出:
file.seekg(1, std::ios_base::cur);
每次get操作后。这是正确的吗?我做错了什么吗?