Frage

std :: wstring.c_str () gibt einen wchar_t *.

Wie komme ich von wchar_t * zu TCHAR * oder von std :: wstring zu TCHAR *

Danke

War es hilfreich?

Lösung

#include <atlconv.h>

TCHAR *dst = W2T(src.c_str());

Wird das Richtige in ANSI oder Unicode-Builds.

Andere Tipps

verwenden:

wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();

TCHAR * definiert wchar_t werden * wenn UNICODE definiert ist, ansonsten ist es char *. So Ihr Code könnte wie folgt aussehen:

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 Allgemein dies nicht möglich ist, da wchar_t nicht die gleiche Größe wie TCHAR sein kann.

mehrere Lösungen sind bereits für die Umwandlung zwischen Zeichensätzen aufgeführt. diese können funktionieren, wenn die Zeichensätze für den Bereich überlappen, umgewandelt wird.

Ich ziehe das Problem ganz wo immer möglich und verwenden eine Standardzeichenfolge zu umgehen, die auf dem TCHAR-Zeichensatz ist wie folgt definiert:

typedef std::basic_string<TCHAR> tstring;

diese mit Ihnen jetzt eine Standard-Bibliothek kompatibel Zeichenfolge, die auch mit den Fenstern Tchar Makro kompatibel ist.

Sie können mit:

wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after

Unter der Annahme, dass Sie unter Windows arbeiten.

Wenn Sie in Unicode Build-Konfiguration sind, dann TCHAR und wchar_t sind die gleiche Sache. Sie könnten ein gegossenes müssen je nachdem, ob Sie / Z-Set für wchar_t ein Typ ist im Vergleich zu wchar_t ein typedef ist.

Wenn Sie in einer Multibyte Build-Konfiguration sind, müssen Sie MultiByteToWideChar (und umgekehrt).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top