2012-11-07 48 views
-2

我把这个问题归结为atoi()的输出类型转换问题。基本上,我将一个string.c_str()传递给atoi(),并且可以像我期望的那样'cout'该值(32)。但是,如果我做这样的类型化:C:将atoi()的输出转换为无符号字符?

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

然后x结束没有任何值。它不仅仅是0或者什么,而是NULL。是什么赋予了?

+3

你是怎么确定x没有价值的? –

+0

好的。 '#include '并执行此操作:'cout << bitset<8>(x);'查看'x'的实际8位二进制表示以确认其实际为0. – vvnraman

+0

尝试'cout <<(long)x << endl; - 它应该打印'32'。 – eraxillan

回答

3

char代表字符符号。当你通过流打印时,你会看到ASCII字符。 32是ASCII代码中space符号的代码,这就是为什么你什么都看不到。

1

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

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

相关问题