Fstream二进制读/写行为

fstream binary read/write behaviour

本文关键字:二进制 Fstream      更新时间:2023-10-16

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

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有以下值:

in readHeader: 0,3,10

in writeHeader: 0,4,12

这导致我必须写一个:

file.seekg(1, std::ios_base::cur);

每次get操作后。对吗?我做错什么了吗?

使用read().

get()提取最多n-1个字符或EOF或错误的n(以第一个为准)到C风格字符串

读取提取最多n个字符或EOF(取第一个)到任何内存位置。