C++ - 不正确的 ASCII 值 ("ë")

标签 c++ png ascii decoder

首先,对于我将犯的任何英语错误,我深表歉意,但 15 岁和法语无济于事......

我正在尝试借助文件格式规范 (http://www.libpng.org/pub/png/spec/1.2/PNG-Contents.html) 编写 PNG 解码器,但我遇到了一个奇怪的问题。

规范说明 PNG 文件的前八个字节始终包含以下(十进制)值: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 表的问题,但我不确定。

谢谢大家! 我会将签名的字符转换为未签名的字符!

最佳答案

你的系统的 char 类型是有符号的,这就是为什么它的值可以是负数的原因。

你需要明确并放下标志:

const unsigned char value = (unsigned char) line[0];

注意 two's complement 中的 -119 = 137你的机器似乎正在使用它。所以这些位本身确实是正确的,关键在于正确解释它们。

关于C++ - 不正确的 ASCII 值 ("ë"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565766/

相关文章:

php - 如何在 PHP 中输​​出一个简单的 ascii 表?

java - 无法读取路径中包含国际化字符的 java 文件名

c++ - MinGW:链接 LAPACK 和 BLAS 导致 C++ 异常无法处理

c++ - 通过 Powershell 远程 session 执行时程序输出不同

android - 减小 .png 文件的大小对内存中的结果位图有一些影响

png - 如何检测是否使用 PhotoShop 编辑了 PNG?

c - 这段c代码中数组/指针的输出是什么

c++ - 如果我将一个无符号整数与一个负整数相加并且算术结果为正,会发生什么情况?

c++ - 通过 istringstream 的 c++ 字符串标记化的性能开销

javascript - 以编程方式从 Raphael.JS 图像生成 PNG