web-dev-qa-db-fra.com

Comment convertir std: string en CString dans un projet unicode

J'ai un std::string. Je dois convertir ce std:string en Cstring.

J'essaie d'utiliser .c_str() mais ce n'est que pour les projets non-unicode et j'utilise les projets unicode (car les projets non-unicode sont obsolètes avec VS2013).

Quelqu'un peut-il me montrer comment convertir un std::string en CString dans un projet Unicode?

12

CString a un constructeur de conversion prenant un const char* ( CStringT::CStringT ). Convertir un std::string en une CString est aussi simple que:

std::string stdstr("foo");
CString cstr(stdstr.c_str());

Cela fonctionne pour les projets UNICODE et MBCS. Si votre std::string contient des caractères NUL incorporés, vous devez utiliser un constructeur de conversion avec un argument de longueur:

std::string stdstr("foo");
stdstr += '\0';
stdstr += "bar";
CString cstr(stdstr.c_str(), stdstr.length());

Notez que les constructeurs de conversion utilisent implicitement la page de code ANSI du thread actuel (CP_THREAD_ACP) pour effectuer la conversion entre le codage ANSI et UTF-16. Si vous ne pouvez pas (ou ne voulez pas) changer la page de code ANSI du thread, mais que vous deviez quand même spécifier une page de code explicite à utiliser pour la conversion, vous devez utiliser une autre solution (par exemple, les Macros de conversion de chaînes ATL et MFC). ).

29
IInspectable

Le constructeur Unicode CString accepte char* afin que vous puissiez faire ceci:

std::string str = "string";
CString ss(str.c_str());
1
cfanhacker

Utilisez les macros de conversion ATL. Ils fonctionnent dans tous les cas, lorsque vous utilisez CString. CString est soit MBCS, soit Unicode ... dépend des paramètres de votre compilateur.

std::string str = "string";
CString ss(CA2T(str.c_str());
1
xMRi

Bonus: si vous utilisez fréquemment la conversion, vous pouvez définir une macro:

#define STDTOCSTRING(s) CString(s.c_str())

donc votre code est plus lisible.

0
iKanor