Wie konvertiert man eine std::wstring
zu einer TCHAR*
? std::wstring.c_str()
funktioniert nicht, da es eine wchar_t*
.
Wie komme ich von wchar_t*
a TCHAR*
oder von std::wstring
a TCHAR*
?
Wie konvertiert man eine std::wstring
zu einer TCHAR*
? std::wstring.c_str()
funktioniert nicht, da es eine wchar_t*
.
Wie komme ich von wchar_t*
a TCHAR*
oder von std::wstring
a TCHAR*
?
TCHAR* ist als wchar_t* definiert, wenn UNICODE definiert ist, ansonsten ist es char*. Ihr Code könnte also etwa so 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 ist dies nicht möglich, da wchar_t nicht die gleiche Größe wie TCHAR haben darf.
Es sind bereits mehrere Lösungen für die Konvertierung zwischen Zeichensätzen aufgeführt. Diese können funktionieren, wenn sich die Zeichensätze für den zu konvertierenden Bereich überschneiden.
Ich ziehe es vor, das Problem, wo immer es möglich ist, vollständig zu umgehen und eine Standardzeichenkette zu verwenden, die auf dem TCHAR-Zeichensatz wie folgt definiert ist:
typedef std::basic_string<TCHAR> tstring;
Damit haben Sie nun eine mit der Standardbibliothek kompatible Zeichenkette, die auch mit dem Windows-Makro TCHAR kompatibel ist.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Bitte beachten Sie, dass dies nur möglich ist, wenn wstring nur ANSI-Zeichen enthält. Erwarten Sie nicht, dass das Ergebnis der vorgeschlagenen Lösung immer eine korrekte Zeichenkette ist. Wenn Sie das tun müssen, bedeutet das wahrscheinlich, dass etwas falsch ist. Siehe meine Antwort hier: stackoverflow.com/questions/1049947/ wie meiner Meinung nach diese Situation gehandhabt werden sollte, indem TCHAR vollständig vermieden wird.