我把这个问题归结为来自 atoi() 输出的类型转换问题。基本上,我将 string.c_str() 传递给 atoi(),我可以像我期望的那样“计算”该值 (32)。但是,如果我进行这样的类型转换:
string num = "32";
unsigned char x = (unsigned char)atoi(num.c_str());
cout << x << endl;
然后 x 最终没有任何值。它不仅仅是 0 什么的,而是 NULL。是什么赋予了?
char
表示字符符号。当您通过流打印时,您将看到 ASCII 字符。32 是space
ASCII 码中的符号代码,这就是为什么你什么都看不到的原因。
一个char
值代表一个字符,因此将其字符打印到流中会显示字符本身,而不是其数字代码。
如果您正在打印的字符的数值由可打印的 ASCII 字母表示,例如与字母对应的值 65 A
,您将看到该字母显示在控制台/终端输出中。在您的示例中,数字代码是 32,它对应于空间,它将保持不可见。数字代码 0 将导致终端打印二进制 NUL 字符的某种表示形式。