Pregunta

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

¿Cómo llego desde wchar_t * a * TCHAR, o de std :: wstring a TCHAR *

Gracias

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top