Como converter std :: wstring a um TCHAR *
Pergunta
std :: wstring.c_str () retorna um wchar_t *.
Como faço para começar a partir de * wchar_t para TCHAR *, ou a partir de std :: wstring para TCHAR *
Graças
Solução
#include <atlconv.h>
TCHAR *dst = W2T(src.c_str());
Será que fazer a coisa certa em ANSI ou Unicode cria.
Outras dicas
usar este:
wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
TCHAR * é definido como wchar_t * se Unicode é definido, caso contrário é char *. Portanto, o seu código pode parecer algo como isto:
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
em Geral isso não é possível, uma vez wchar_t não pode ser o mesmo tamanho que TCHAR.
várias soluções já estão listados para converter entre conjuntos de caracteres. Estes podem funcionar se os conjuntos de caracteres se sobrepõem para a faixa que está sendo convertido.
Eu prefiro evitar a questão inteiramente sempre que possível e usar uma corda padrão que é definido no conjunto de caracteres TCHAR da seguinte forma:
typedef std::basic_string<TCHAR> tstring;
usando este agora você tem uma string compatível biblioteca padrão que também é compatível com as janelas TCHAR macro.
Você pode usar:
wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
Assumindo que você está operando no Windows.
Se você está na configuração de compilação Unicode, então TCHAR
e wchar_t
são a mesma coisa. Você pode precisar de um elenco dependendo se você tem / set Z para wchar_t
é um tipo contra wchar_t é um typedef.
Se você estiver em uma configuração de vários bytes compilação, você precisa MultiByteToWideChar
(e vica versa).