Question

J'ai une situation où je dois comparer un char* avec un WideString.
Comment puis-je convertir le WideString à un char * en C ++?

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top