我正在通过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)。如果问题很简单,请道歉。
答案 0 :(得分:2)
这是byte ordering issue - 磁盘上的流包含的顺序(big endian as specified in the PNG spec)的字节数与结构要求的整数(可能是little-endian)相反。您必须手动反转字节顺序才能解决此问题。