Domanda

std :: wstring.c_str () restituisce un wchar_t *.

Come si arriva da wchar_t * a * TCHAR, oppure da std :: wstring a TCHAR *

Grazie

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top