最初に、英語の間違いをお詫びしますが、15 歳でフランス語は役に立ちません...
ファイル形式仕様 ( http://www.libpng.org/pub/png/spec/1.2/PNG-Contents.html )を使用して PNG デコーダーをプログラムしようとしていますが、奇妙な問題に遭遇しました。
仕様によると、PNG ファイルの最初の 8 バイトには常に次の (10 進数) 値が含まれます: 137 80 78 71 13 10 26 10.
この単純なプログラムをテストすると:
int main()
{
ifstream file("test.png");
string line;
getline(file, line);
cout << line[0] << endl;
}
出力は、ASCII テーブルで 137 を表す「ë」です。よし、最初のバイトと一致する。
ただし、実行するint ascii_value = line[0];
と、出力値は -119 になり、これは正しい ascii 値ではありません。
「e」のような別の文字で同じことを試みると、正しい ascii 値が出力されます。
誰かが私が間違っていることと解決策を説明できますか? 個人的には拡張ASCIIテーブルの問題だと思いますが、よくわかりません。
みんなありがとう!signed char を unsigned char にキャストします。