【发布时间】:2013-01-12 00:16:54
【问题描述】:
首先,我为我将犯的任何英语错误道歉,但 15 岁和法语并没有帮助......
我正在尝试借助文件格式规范 (http://www.libpng.org/pub/png/spec/1.2/PNG-Contents.html) 对 PNG 解码器进行编程,但遇到了一个奇怪的问题。
规范规定 PNG 文件的前 8 个字节始终包含以下(十进制)值: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 表的问题,但我不确定。
谢谢大家! 我会将已签名的字符转换为未签名的字符!
【问题讨论】:
-
首先,std::string [] 运算符返回一个(对 a 的引用)char 而不是 int。根据您运行的语言环境以及您的限制文件所说的 -119 是一个完全有效的数字:)
-
你的格式和英文都不错,不需要道歉:)
-
有意或无意,第一行很搞笑,因为这篇文章中的英语比许多(如果不是大多数)在线帖子中的要好......
-
ë 137 采用什么编码方式?在 Unicode、iso8859-1 和 iso8859-15 中,ë 是 235。