0

我在写入/读取二进制值时遇到了一个“奇怪”的问题:

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操作后。这是正确的吗?我做错了什么吗?

4

1 回答 1

1

使用read()

get() 将最多 n-1 个字符或 EOF 或错误(以第一个)的 \n 提取到 C 样式字符串中

read 将最多 n 个字符或 EOF(以第一个字符为准)提取到任何内存位置。

于 2012-12-24T09:10:06.413 回答