c++ - 在 C++ 中查看 ASCII 代码时出现意外结果

标签 c++ casting char

下面的代码是从字符中提取 ASCII 码。 当我转换正常 ASCII 区域中的字符时,我得到了我期望的值。 当我从扩展区域转换 £ 和 € 时,我得到了 1 的负载来填充我存储字符的 INT。

例如下面的输出是:

45(符合预期的 ascii E) FFFFFF80(按预期扩展了 ascii €,但填充了 1)

这不会给我带来问题,但我只是想知道为什么会这样。 这是代码...

unsigned int asciichar[3];
    string cTextToEncode = "E€";
    for (unsigned int i = 0; i < cTextToEncode.length(); i++)
    {
        asciichar[i] = (unsigned int)cTextToEncode[i];
        cout << hex << asciichar[i] << "\n";    
    }

谁能解释一下这是为什么? 谢谢

最佳答案

根据实现,char 可以是有符号的或无符号的。在您的情况下,它们似乎已签名,因此 0x80 被解释为 -128 而不是 128,因此当转换为整数时,它变为 0xffffff80。

顺便说一句,这与 ASCII 没有任何关系

关于c++ - 在 C++ 中查看 ASCII 代码时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4657099/

相关文章:

c - 带有类型转换的讨厌的指针数组,Invalid Initializer 错误

C 返回字符串不正确

c++ - sizeof() 运算符的行为

c++ - "Logically slower"算法原来更快,但为什么呢?

c++ - 模板如何影响 C++ 中的隐式声明规则?

c++ - 巨大的整数错误。调试断言失败

C++数组作为指针问题

java - JOOq:更新通用表

Java 泛型和类型转换

c - 在 C 中处理字符串输入