2013-03-04 108 views
-1

我得到了一個值爲1的無符號字符,我需要把它放在像「1」這樣的字符串中。 但是,如果我試圖把這個直接放入一個stringstream它將得到char(1)的值,我需要它是「1」。 我知道,如果我可以將它放入函數atoi中,它將返回「1」值。 但我試圖將它轉換爲char並將其放入atoi函數中,但它會引發異常。 已經嘗試將它放入一個字符串中,並將c_str()轉換爲atoi函數,但沒有成功。 如果有人可以幫助我,我會補充。用無符號字符C++ atoi

+0

你需要發佈實際的代碼,因爲你的問題毫無意義。 – 2013-03-04 12:13:49

+0

請注意,'[unsigned] char'類型是文本字符(儘管它們也可以用作一個字節的整數值)。在內存中,文本字符和數字看起來是相同的,但是用字符串編寫它們不會(一個數字寫成幾個數字,而一個字符保留一個字符)。因此,stringstream會將其作爲一個字符寫入目標字符串中,以便您看到意想不到的情況。問題是stringstream不知道*如果你的字符是代表一個字符或數字。 – leemes 2013-03-04 12:27:01

回答

3

只需抹上charint將其插入std::stringstream前:

ss << static_cast<int>(c); 

這將把char的價值不是一個字符,但作爲一個數值。

+0

或者'unsigned int',取決於更高的值應該是什麼樣子。 +1。 – us2012 2013-03-04 12:18:52

0

我相信你在這裏混淆了兩個函數。

您希望將整數轉換爲字符串。

atoi(ascii to integer)但是會將字符串解析爲一個整數,從而使"123"變爲123

您正在尋找itoa功能在這裏,它有這個原型:

char * itoa (int value, char * str, int base); 

在你的情況,這應該是這樣的:

char Buf[10]; 
itoa(123, Buf, 10); 
printf("%s", Buf); //Outputs 123 

請記住雖然,itoa不是標準的一部分,即使它受到一些編譯器的支持。爲了更符合標準的版本使用:

sprintf(Buf, "%d", 123); 

當然,所有這一切都是純C,但任何C++編譯器將與這一切同樣的工作。

0

要將[0,9]範圍內的數值轉換爲相應的字符,只需將'0'添加到它。這保證可以在所有系統上運行。