std :: wstring.c_str() renvoie un wchar_t *.Comment convertir std :: wstring en TCHAR *
Comment puis-je obtenir de wchar_t * à TCHAR *, ou de std :: wstring à TCHAR *
Merci
std :: wstring.c_str() renvoie un wchar_t *.Comment convertir std :: wstring en TCHAR *
Comment puis-je obtenir de wchar_t * à TCHAR *, ou de std :: wstring à TCHAR *
Merci
#include <atlconv.h>
TCHAR *dst = W2T(src.c_str());
fera la bonne chose dans la norme ANSI ou Unicode construit.
Et vous avez besoin de 'USES_CONVERSION;' devant W2T sinon il se plaindra: "erreur C2065: '_lpw': identificateur non déclaré" etc. – Deqing
TCHAR * est défini comme wchar_t * si UNICODE est défini, sinon il est char * . Votre code peut donc 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
En supposant que vous travaillez sous Windows. Si vous êtes en configuration de construction Unicode, alors TCHAR
et wchar_t
sont identiques. Vous pourriez avoir besoin d'un cast selon que vous avez/Z défini wchar_t
est un type par rapport à wchar_t est un typedef.
Si vous êtes dans une configuration de construction multi-octets, vous avez besoin de MultiByteToWideChar
(et inversement).
Vous pouvez utiliser:
wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
en général ce n'est pas possible car wchar_t peut ne pas avoir la même taille que TCHAR.
Plusieurs solutions sont déjà répertoriées pour la conversion entre les jeux de caractères. ceux-ci peuvent fonctionner si les jeux de caractères se chevauchent pour la gamme 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 la macro Windows TCHAR.
utiliser ceci:
wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
erreur C2440: 'initialisation': impossible de convertir 'wchar_t *' en 'TCHAR * ' – Deqing
Fonctionne parfaitement. Je vous remercie. –
S'il vous plaît garder à l'esprit que cela est possible que si wstring ne contient que des caractères ANSI. Ne vous attendez pas à ce que le résultat de la solution suggérée soit une chaîne correcte à tout moment. En fait, si vous devez le faire, cela signifie probablement qu'il y a quelque chose qui ne va pas. Voir ma réponse ici: http://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful/1855375#1855375 sur comment je crois que cette situation devrait être gérée, en évitant TCHAR complètement. –