Comment puis-je convertir System :: WideString à un char * et vice versa?
-
20-09-2019 - |
Question
J'ai une situation où je dois comparer un char*
avec un WideString
.
Comment puis-je convertir le WideString à un char * en C ++?
La solution
Vous pouvez utiliser la fonction wcstombs.
size_t wcstombs (char * mbstr, const wchar_t * wcstr, size_t max) ;
Autres conseils
Voir WideCharToMultiByte () et < a href = "http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx" rel = "nofollow noreferrer"> MultiByteToWideChar () .
Pas possible. En fait, vous avez mélangé deux concepts différents:
- WideString implique un tampon dans le codage UTF-16.
- char * peut contenir quoi que ce soit, de UTF-8 au texte ASCII uniquement (auquel cas, cela est convertable que si votre WideString ne contient pas de caractères non-ASCII).
S'il vous plaît voir ma réponse à https://stackoverflow.com/questions/1049947/ devrait-utf-16-être réfléchie nuisibles sur la façon de traiter correctement le texte.
comparer System::WideString
objet avec un char*
(comme la question body dit que vous voulez faire), vous pouvez créer un nouvel objet WideString
du pointeur, puis utiliser l'opérateur de ==
ordinaire. La classe a plusieurs constructeurs, dont une pour const char*
.
char* foo = ...;
WideString bar = ...;
if (WideString(foo) == bar)
std::cout << "They're equal!\n";
En fait, tant que l'objet WideString
est à gauche, vous ne même pas besoin de l'appel du constructeur, car le pointeur sera automatiquement convertie.
if (bar == foo) { ... }
convertir WideString
à un char*
(comme la question titre dit que vous voulez faire), vous pouvez envisager d'utiliser la AnsiString
type . Ils sont convertibles entre eux. Pour obtenir le pointeur ordinaire, appelez la méthode c_str
, tout comme vous serait avec std::string
.
WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();