-2

我把这个问题归结为来自 atoi() 输出的类型转换问题。基本上,我将 string.c_str() 传递给 atoi(),我可以像我期望的那样“计算”该值 (32)。但是,如果我进行这样的类型转换:

string num = "32";
unsigned char x = (unsigned char)atoi(num.c_str());
cout << x << endl;

然后 x 最终没有任何值。它不仅仅是 0 什么的,而是 NULL。是什么赋予了?

4

2 回答 2

3

char表示字符符号。当您通过流打印时,您将看到 ASCII 字符。32 是spaceASCII 码中的符号代码,这就是为什么你什么都看不到的原因。

于 2012-11-07T07:15:21.820 回答
1

一个char值代表一个字符,因此将其字符打印到流中会显示字符本身,而不是其数字代码。

如果您正在打印的字符的数值由可打印的 ASCII 字母表示,例如与字母对应的值 65 A,您将看到该字母显示在控制台/终端输出中。在您的示例中,数字代码是 32,它对应于空间,它将保持不可见。数字代码 0 将导致终端打印二进制 NUL 字符的某种表示形式。

于 2012-11-07T07:15:31.433 回答