2013-07-19 125 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的例子有任何不同,你应该仔细考虑这个(字符串**文字**已经有空终止符) –