C:将atoi()的类型转换为unsigned char?

时间:2012-11-07 07:12:28

标签: c++ casting std atoi

我已经将问题归结为atoi()输出的类型转换问题。基本上,我将一个string.c_str()传递给atoi(),我可以像我期望的那样'cout'这个值(32)。但是,如果我做这样的类型转换:

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

然后x最终没有任何值。它不仅仅是0或者其他东西,而是NULL。是什么给了什么?

2 个答案:

答案 0 :(得分:3)

char代表字符符号。当您通过流打印它时,您将看到ASCII字符。 32是ASCII码中space符号的代码,这就是为什么你看不到任何东西。

答案 1 :(得分:1)

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

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