下面的代码是从字符中提取 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/