86 votes

Transformation de style C ++ de char non signé * à const char *

J'ai:

 unsigned char *foo();
std::string str;
str.append(static_cast<const char*>(foo()));
 

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

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

65voto

Brian R. Bondy Points 141769

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

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

57voto

JaredPar Points 333733

Essayez reinterpret_cast

 unsigned char *foo();
std::string str;
str.append(reinterpret_cast<const char*>(foo()));
 

53voto

Ruben Bartelink Points 23945

réinterpréter_cast

20voto

AJG Points 101

unsigned char* est en fait un tableau d'octets et doit être utilisé pour représenter des données brutes plutôt qu'une chaîne de caractères en général. Une chaîne unicode serait représenté comme wchar_t*

Selon la norme C++ un reinterpret_cast entre unsigned char* et char* est sûr qu'ils sont de la même taille et ont la même construction et les contraintes. J'essaie d'éviter reintrepret_cast plus encore que const_cast en général.

Si statique de la conversion échoue avec ce que vous faites, vous pouvez vouloir reconsidérer votre conception parce que franchement si vous êtes à l'aide de C++, vous voudrez peut-être prendre avantage de ce que le "plus plus" une partie de l'offre et de l'utilisation de la chaîne de classes et STL (aka std::basic_string pourrait fonctionner mieux pour vous)

6voto

Timo Geusch Points 16952

Vous devrez utiliser reinterpret_cast<> car les deux types que vous utilisez ne sont pas liés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X