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?
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). ).
Le constructeur Unicode CString
accepte char*
afin que vous puissiez faire ceci:
std::string str = "string";
CString ss(str.c_str());
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());
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.