Dies funktioniert nur für ASCII-Zeichenfolgen, aber es funktioniert nicht, wenn die zugrunde liegende Zeichenfolge UTF-8-codiert ist. Die Verwendung einer Konvertierungsroutine wie MultiByteToWideChar() stellt sicher, dass dieses Szenario ordnungsgemäß behandelt wird.
Dies sollte für ASCII-Zeichenfolgen gut funktionieren, aber es funktioniert nicht, wenn die zugrunde liegende Zeichenfolge UTF-8-codiert ist. Die Verwendung einer Konvertierungsroutine wie MultiByteToWideChar() stellt sicher, dass dieses Szenario ordnungsgemäß behandelt wird.
– Matt Dillard
29. Oktober 08 um 13:50 Uhr
Sie sollten MultiByteToWideChar mit korrekter Codepage verwenden. Um genau zu sein, sind zwei Aufrufe erforderlich: der erste, um die erforderliche Länge des Zielstrings wchar_t zu erhalten, und der zweite, um den char-String in den wchar_t-String umzuwandeln.
– Johann Gerell
30. Oktober 08 um 8:56 Uhr
Es funktioniert nur, wenn wchar_t Unicode und char Latin-1 oder ASSCII ist. Die ersten 256 Zeichenwerte von Unicode stimmen genau mit Latin-1 überein; die ersten 128 Zeichen von Latin-1 stimmen exakt mit ASCII überein.
– MSalter
30. Oktober 08 um 10:07 Uhr
kann ‘const char*’ nicht in ‘wchar_t*’ konvertieren
– Hani Goc
8. Dezember 15 um 13:46 Uhr
das gibt mir einen Fehler: cannot convert from 'const wchar_t *' to 'wchar_t *' Ich musste verwenden: const wchar_t* widecstr = widestr.c_str();
– Wakan Tanka
15. Februar 17 um 13:16 Uhr
Matt Dillard
Wenn Sie ein std::wstring-Objekt haben, können Sie es aufrufen c_str() darauf, a zu bekommen wchar_t*:
Da Sie jedoch mit einer schmalen Saite arbeiten, müssten Sie diese zuerst weiten. Hier gibt es verschiedene Möglichkeiten; Eine besteht darin, das integrierte Windows zu verwenden MultiByteToWideChar Routine. Das gibt dir ein LPWSTR, was gleichbedeutend ist mit wchar_t*.
@ʎǝʞuoɯɹǝqʎɔ: Du meinst wstring var = L"text";
– Muhende Ente
12. März 15 um 20:45 Uhr
Sie können die ATL-Textkonvertierungsmakros verwenden, um eine schmale Zeichenfolge (char) in eine breite Zeichenfolge (wchar_t) zu konvertieren. Um beispielsweise einen std::string zu konvertieren:
Sie können auch eine Codepage angeben. Wenn Ihr std::string also UTF-8-Zeichen enthält, können Sie Folgendes verwenden:
CA2W pszWide(str.c_str(), CP_UTF8);
Sehr nützlich, aber nur Windows.
Sie möchten wahrscheinlich CA2CW. Vielleicht möchten Sie auch eine grundlegende Erklärung für die Namenskonvention von Makros hinzufügen (z. B.: Const Ascii -> Const Wchar).
– Nik
29. Oktober 08 um 15:48 Uhr
Es gibt keine CA2CW-Konvertierungsfunktion. Es gibt eine CA2CT-Version, aber diese nennt sich einfach CA2W. Siehe für eine vollständige Liste.
– Rauben
30. Oktober 08 um 8:58 Uhr
Unglaublich nützlich. Nur in meinem Fall #include <atlstr.h> gearbeitet, während #include <atlconv.h> nicht. Keine Ahnung warum.
– ceztko
16. Juli 11 um 7:17 Uhr
Ich würde auch empfehlen CA2WEX stattdessen, wodurch potenzielle Stapelüberläufe umgangen werden.
– Muhende Ente
12. März 15 um 20:47 Uhr
Wenn Sie Linux/Unix verwenden, werfen Sie einen Blick auf mbstowcs() und wcstombs(), die in GNU C (von ISO C 90) definiert sind.
mbs steht für “Multi Bytes String” und ist im Grunde der übliche nullterminierte C-String.
wcs steht für Wide Char String und ist ein Array von wchar_t.
Weitere Hintergrundinformationen zu Breitzeichen finden Sie in der glibc-Dokumentation Hier.
.
6864700cookie-checkIch möchte std::string in eine Konstante wchar_t umwandeln *yes