Come convertire std :: wstring ad un TCHAR *
Domanda
std :: wstring.c_str () restituisce un wchar_t *.
Come si arriva da wchar_t * a * TCHAR, oppure da std :: wstring a TCHAR *
Grazie
Soluzione
#include <atlconv.h>
TCHAR *dst = W2T(src.c_str());
Sarà fare la cosa giusta in ANSI o Unicode costruisce.
Altri suggerimenti
utilizzare questo:
wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
* TCHAR è definito come wchar_t * se UNICODE è definito, altrimenti è char *. Così il vostro codice potrebbe essere simile a questo:
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
in generale questo non è possibile in quanto wchar_t non può essere la stessa dimensione TCHAR.
diverse soluzioni sono già quotate per la conversione tra set di caratteri. questi possono funzionare se i set di caratteri si sovrappongono per l'intervallo da convertire.
Io preferisco di eludere la questione del tutto laddove possibile e utilizzare una stringa standard che è definito sul carattere TCHAR impostato come segue:
typedef std::basic_string<TCHAR> tstring;
usando questo ora avete una stringa compatibile con standard di libreria che è anche compatibile con le finestre TCHAR macro.
È possibile utilizzare:
wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
Supponendo che si sta operando su Windows.
Se si è in configurazione di generazione Unicode, quindi TCHAR
e wchar_t
sono la stessa cosa. Potrebbe essere necessario un cast a seconda se si dispone / Z impostato per wchar_t
è un tipo contro wchar_t è un typedef.
Se vi trovate in una configurazione più byte di compilazione, è necessario MultiByteToWideChar
(e vice versa).