从字节流中读取uint32_t

时间:2013-11-05 10:49:08

标签: c++

我正在通过std::basic_ifstream<std::uint8_t>从PNG图像中读取字节。我在读取一个应该被解释为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)。如果问题很简单,请道歉。

1 个答案:

答案 0 :(得分:2)

这是byte ordering issue - 磁盘上的流包含的顺序(big endian as specified in the PNG spec)的字节数与结构要求的整数(可能是little-endian)相反。您必须手动反转字节顺序才能解决此问题。