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 ++?
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 ++?
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
.
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)
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.