Cómo convertir std :: wstring a un TCHAR *
Pregunta
std :: wstring.c_str () devuelve un wchar_t *.
¿Cómo llego desde wchar_t * a * TCHAR, o de std :: wstring a TCHAR *
Gracias
Solución
#include <atlconv.h>
TCHAR *dst = W2T(src.c_str());
Lo hará lo correcto en ANSI o Unicode construye.
Otros consejos
utilizar esto:
wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
TCHAR * se define como wchar_t * si no se define UNICODE, de lo contrario es char *. Por lo que su código podría ser algo como esto:
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 General esto no es posible desde wchar_t puede no ser el mismo tamaño que TCHAR.
varias soluciones ya están registradas para la conversión entre conjuntos de caracteres. estos pueden funcionar si los juegos de caracteres se superponen para el rango de ser convertido.
Yo prefiero eludir el tema por completo cuando sea posible y utilizar una cadena estándar que se define en el carácter TCHAR establecido de la siguiente manera:
typedef std::basic_string<TCHAR> tstring;
usar este ahora tiene una cadena compatible biblioteca estándar, que también es compatible con las ventanas TCHAR macro.
Puede utilizar:
wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
Si se asume que se está operando en Windows.
Si se encuentra en configuración de generación Unicode, entonces TCHAR
y wchar_t
son la misma cosa. Es posible que necesite un reparto en función de si tiene / Z fijado para wchar_t
es un tipo frente wchar_t es un typedef.
Si se encuentra en una configuración de varios bytes de construcción, es necesario MultiByteToWideChar
(y viceversa vica).