2013-07-19 25 views
21

türüne çevirme özelliği yok. xmlChar* (imzasız char * olan) bir dizgim var, bu imzasız char'ı std::string türüne dönüştürmek istiyorum. convertigned char * 'yi String

xmlChar* name = "Some data"; 

Ben döküm yazmak için elimden geleni yaptım, ama bunu dönüştürmek için bir yol yapamadı.

+1

'Dize veya' std :: string'? Std :: string' anlamına gelmezseniz 'String' nedir? –

+0

Maalesef @Mats Petersson, BTW onun std :: string – Cyril

+0

Kullanım bu [Bkz reinterpret_cast http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const- karakter] [1] [1]: ve http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char – Ani

cevap

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

reinterpret_cast<char*>(name) güvenli olmayan bir şekilde char* için unsigned char* gelen atmalarını ama bu burada kullanılması gereken biri. Sonra sıradan kurucuyu std::string olarak adlandırın.

Ayrıca bu C'yi tarzı (önerilmez) yapabilirdi:

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

Bazı durumlarda, reinterpret ifadesinin sonunda bazı gereksiz karakterler ürettiğini fark ettim. Kesmek kolay olmadıklarından çok fazla araştırma yapmadılar, ama yalnız olmadığımı belirtmek isterim diye düşündüm. – MatrixManAtYrService

+0

Yalnız değil, benimle de oldu – audiFanatic

+0

İmzasız char dizininiz boş bir sonlandırıcı ile bitmediği için (veya düşündüğünüzü düşündüğün biriyle bitmiyor) muhtemelen önemsiz görüyorsun. Genellikle, NUL düşünmeden bir türden bir dize türüne döküm yapmak tehlikelidir ve eğer kodunuz OP'nin örneğinin herhangi bir şekilde farklı olması durumunda bunu dikkatli bir şekilde düşünmelisiniz (string ** literals ** zaten sıfır sonlandırıcıya sahip) –

İlgili konular