Coulée de style C ++ à partir de chars non signés * en caractères const *

J’ai:

unsigned char *foo(); std::ssortingng str; str.append(static_cast(foo())); 

L’erreur: invalid static_cast from type 'unsigned char*' to type 'const char*'

Quelle est la bonne façon de lancer ici en style C ++?

reinterpret_cast

char * et const unsigned char * sont considérés comme des types sans rapport. Donc, vous voulez utiliser reinterpret_cast .

Mais si vous const unsigned char* de const unsigned char* à un type non- const vous devez d’abord utiliser const_cast . reinterpret_cast ne peut pas rejeter une qualification const ou volatile .

Essayez reinterpret_cast

 unsigned char *foo(); std::ssortingng str; str.append(reinterpret_cast(foo())); 

unsigned char * est essentiellement un tableau d’octets et devrait être utilisé pour représenter des données brutes plutôt qu’une chaîne en général. Une chaîne Unicode serait représentée par wchar_t *

Selon le standard C ++, un reinterpret_cast entre unsigned char * et char * est sûr car ils ont la même taille et ont la même construction et les mêmes contraintes. J’essaie d’éviter reintrepret_cast encore plus que const_cast en général.

Si le cast statique échoue avec ce que vous êtes en train de faire, vous voudrez peut-être reconsidérer votre conception car si vous utilisez C ++, vous voudrez peut-être tirer parti de la partie “plus plus” et utiliser des classes de chaînes et STL pourrait fonctionner mieux pour vous)

Vous devrez utiliser un reinterpret_cast<> car les deux types entre lesquels vous lancez ne sont pas liés.

J’espère que ça aide. 🙂

 const unsigned atsortingbName = getname(); const unsigned atsortingbVal = getvalue(); const char *attrName=NULL, *attrVal=NULL; attrName = (const char*) atsortingbName; attrVal = (const char*) atsortingbVal;