2012-11-07 88 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字符的某種表示形式。

相關問題