1

を介してPNG画像からバイトを読み取っています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 に答える