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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top