Question

std :: wstring.c_str () retourne une wchar_t *.

Comment puis-je obtenir de wchar_t * à TCHAR *, ou de std :: wstring à TCHAR *

Merci

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top