2013-07-19 21 views
21

Sono un po 'scarso in tipo casting. Ho una stringa in xmlChar* (che è char unsigned *), voglio convertire questo char unsigned in un tipo std::string.converte char unsigned * in stringa

xmlChar* name = "Some data"; 

Ho fatto del mio meglio per digitare cast, ma non ho potuto un modo per convertirlo.

+1

'String o' std :: STRING'? Cos'è 'String', se non intendi' std :: string'? –

+0

spiacenti @Mats Petersson, BTW sua std :: string – Cyril

+0

Usa reinterpret_cast Vai a questa [http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const- char] [1] [1]: http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char – Ani

risposta

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

reinterpret_cast<char*>(name) getta unsigned char*-char* in modo non sicuro, ma questo è quello che dovrebbe essere usato qui. Quindi si chiama il costruttore ordinario di std::string.

Si potrebbe anche farlo in stile C (non raccomandato):

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

Ho scoperto che in alcuni casi, il cast reinterpretato produce alcuni caratteri indesiderati alla fine. Non ho indagato troppo a fondo perché erano facili da troncare, ma ho pensato di parlarne nel caso non fossi da solo. – MatrixManAtYrService

+0

Non da solo, è successo anche con me – audiFanatic

+0

Probabilmente stai vedendo una cianfrusaglia perché il tuo array di car unsigned non termina con un terminatore nullo (o non termina con uno dove pensi che faccia). Generalmente, il solo casting da un tipo a un tipo di stringa senza considerare NUL è pericoloso e dovresti pensarci attentamente se il tuo codice è in qualche modo diverso dall'esempio di OP (stringa ** letterali ** hanno già terminatori null) –