繁体   English   中英

从字节流中读取uint32_t

[英]Reading an uint32_t from a byte stream

我正在通过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)。 抱歉,这个问题无关紧要。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM