【发布时间】:2021-05-14 10:37:15
【问题描述】:
我看到了这个问题:How to convert an ASCII char to its ASCII int value?
投票最多的答案 (https://stackoverflow.com/a/15999291/14911094) 将解决方案表述为:
这样做:
int(k)
但是我有这个问题。
我的代码是:
std::cout << char(144) << std::endl;
std::cout << (int)(char(144)) << std::endl;
std::cout << int('É') << std::endl;
现在输出如下:
É
-112
-55
现在我可以理解第一行但第二行和第三行发生了什么?
首先,一些 ASCII 怎么可能是负数,其次对于同一个字符,怎么可能不同。
此外,据我测试,这不是内存中的一些随机垃圾,因为每次运行程序时它都保持不变:
如果我将其更改为 145:
æ
-111
据我猜测这可能是由于某种溢出导致的输出更改为 1。
但我不能完全按照我正在转换为 int 的方式得到它,这应该足以 (4 bytes) 来存储结果。
任何人都可以提出解决方案吗?
【问题讨论】:
-
我认为使用 unsigned char 会起作用,它最多有 255 个
-
首先,AFAIK ASCII 仅定义为从 32 到 127。其他任何东西都不是 ASCII。在您的情况下,
char类型是一字节有符号类型。 IE。它可以保持值-127..128。因此,当您执行char(144)时,它存储为 -112,而当您执行 (int) 时,它只是将单字节 int 转换为 Cint而无需进行符号转换。 PS:int('É')的值可能与 144 不同,因为您的源代码使用与终端不同的编码进行编码,可能是 UTF-8。 -
@debanshudas:这是 C 和 C++ 标准允许的最小最大值。
-
@sklott:字符 0 到 31 也用 ASCII 定义。
-
@sklott • ASCII 127 不是显示字符。
标签: c++ integer character ascii