1

我正在通过std::basic_ifstream<std::uint8_t>. 我在读取应解释为 32 位 int 的 4 字节序列时遇到问题。

std::uint32_t read_chunk_length(std::basic_ifstream<std::uint8_t> &ifs) {
    std::uint32_t length;
    ifs.read(reinterpret_cast<std::uint8_t*>(&length), 4);
    return length;
}

当读取一个 00 00 00 0d 并且因此应该是 0xd (或 13)的序列时,上面的函数给我 0xd000000 (或 218103808 代替)。如果问题微不足道,请道歉。

4

1 回答 1

2

这是一个字节排序问题- 磁盘上的流包含的字节顺序(PNG 规范中指定的大端序)与您的架构要求的整数(可能是小端序)相反。您必须手动反转字节顺序才能解决此问题。

于 2013-11-05T10:51:20.697 回答