2013-07-19 212 views
21

我在鑄造類型方面有點欠缺。我在xmlChar*(它是無符號字符*)中有一個字符串,我想將這個無符號字符轉換爲std::string類型。將無符號字符*轉換爲字符串

xmlChar* name = "Some data"; 

我盡我所能輸入了劇集,但我無法轉換它。

+1

'字符串或'的std :: string'?什麼是'String',如果你不是指'std :: string'? –

+0

對不起@Mats皮特森,BTW它的std :: string – Cyril

+0

使用的reinterpret_cast 看到這個[http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-炭] [1] [1]:http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char – Ani

回答

36
std::string sName(reinterpret_cast<char*>(name)); 

reinterpret_cast<char*>(name)unsigned char*強制轉換爲char*以不安全的方式,但是這應該在此處使用的一個。然後你調用std::string的普通構造函數。

你也可以做到這一點C風格的(不推薦):

std::string sName((char*) name); 
+0

我發現在某些情況下,reinterpret強制在最後產生一些垃圾字符。由於它們很容易截斷,所以沒有深入調查,但我想我會提到它,以防萬一我不孤單。 – MatrixManAtYrService

+0

並不孤單,我也發生過 – audiFanatic

+0

你可能看到垃圾是因爲你的unsigned char數組沒有以一個空終止符結束(或者沒有以你認爲的那個結束)。通常,從一個類型轉換爲一個字符串類型而不考慮NUL是很危險的,如果你的代碼與OP的例子有任何不同,你應該仔細考慮這個(字符串**文字**已經有空終止符) –