4 Stimmen

Wie konvertiert man std::wstring in ein 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* ?

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.

6voto

SaeidMo7 Punkte 1084

Verwenden:

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

2 Stimmen

Fehler C2440: 'initializing' : kann nicht von 'wchar_t *' nach 'TCHAR *' konvertieren

0 Stimmen

Funktioniert perfekt. Ich danke Ihnen.

4voto

Ferruccio Punkte 96076
#include <atlconv.h>

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

Wird in ANSI- oder Unicode-Builds das Richtige tun.

1 Stimmen

Und Sie brauchen USES_CONVERSION; vor W2T sonst wird es sich beschweren: "Fehler C2065: '_lpw' : nicht deklarierter Bezeichner" usw.

2voto

user224217 Punkte 41

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

2voto

tletnes Punkte 1898

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.

1voto

rmn Punkte 2338

Sie können verwenden:

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

CodeJaeger.com

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.

Powered by:

X