Comment convertir std :: wstring à un TCHAR *
Question
std :: wstring.c_str () retourne une wchar_t *.
Comment puis-je obtenir de wchar_t * à TCHAR *, ou de std :: wstring à TCHAR *
Merci
La solution
#include <atlconv.h>
TCHAR *dst = W2T(src.c_str());
Est-ce que faire la bonne chose dans la norme ANSI ou Unicode construit.
Autres conseils
utilisez ceci:
wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
TCHAR * est défini comme wchar_t * si UNICODE est défini, sinon il est char *. Donc, votre code pourrait ressembler à ceci:
wchar_t* src;
TCHAR* result;
#ifdef UNICODE
result = src;
#else
//I think W2A is defined in atlbase.h, and it returns a stack-allocated var.
//If that's not OK, look at the documenation for wcstombs.
result = W2A(src);
#endif
Général cela est impossible puisque wchar_t peut ne pas être la même taille que TCHAR.
plusieurs solutions sont déjà inscrites pour la conversion entre les jeux de caractères. ceux-ci peuvent fonctionner que si les jeux de caractères se chevauchent pour la plage en cours de conversion.
Je préfère contourner la question tout à chaque fois que possible et utiliser une chaîne standard qui est définie sur le caractère TCHAR défini comme suit:
typedef std::basic_string<TCHAR> tstring;
en utilisant ce que vous avez maintenant une bibliothèque standard chaîne compatible est également compatible avec les fenêtres TCHAR macro.
Vous pouvez utiliser:
wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
En supposant que vous utilisez sous Windows.
Si vous êtes dans la configuration de construction Unicode, puis TCHAR
et wchar_t
sont la même chose. Vous pourriez avoir besoin d'un casting selon que vous avez / Z fixé pour wchar_t
est un type contre wchar_t est un typedef.
Si vous êtes dans une configuration de construction multi-octets, vous devez MultiByteToWideChar
(et vice et versa).