Wie konvertiere ich System :: Widestring in einem char * und umgekehrt?
-
20-09-2019 - |
Frage
Ich habe eine Situation, wo ich brauche eine char*
mit einem WideString
zu vergleichen.
Wie finde ich den Widestring in einem char * in C ++ konvertieren?
Lösung
Sie können die wcstombs-Funktion verwenden.
size_t wcstombs (char * mbstr, const wchar_t * wcstr, size_t max) ;
Andere Tipps
Siehe WideCharToMultiByte () und < a href = "http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx" rel = "nofollow noreferrer"> MultiByteToWideChar () .
Nicht möglich. Eigentlich Sie mischten zwei unterschiedliche Konzepte:
- impliziert Wide einen Puffer in UTF-16-Codierung.
- char * kann alles enthalten, von UTF-8 in ASCII-Text nur (in diesem Fall, diese konvertierbar ist nur, wenn Ihr Wide nicht Nicht-ASCII-Zeichen enthält).
Bitte beachten Sie meine Antwort auf https://stackoverflow.com/questions/1049947/ sollte-utf-16-sein-als-schädlich darüber, wie Text richtig zu behandeln.
vergleichen ein System::WideString
Objekt mit ein char*
(wie die Frage Körper sagt, Sie tun wollen), können Sie ein neues WideString
Objekt aus dem Zeiger erstellen und dann gewöhnlichen ==
Operator verwenden. Die Klasse hat mehrere Konstrukteure, darunter eine für const char*
.
char* foo = ...;
WideString bar = ...;
if (WideString(foo) == bar)
std::cout << "They're equal!\n";
In der Tat, solange das WideString
Objekt auf der linken Seite ist, brauchen Sie nicht einmal den Konstruktoraufruf weil der Zeiger automatisch konvertiert werden.
if (bar == foo) { ... }
convert ein WideString
zu einem char*
(wie die Frage title sagt, Sie tun wollen), können Sie die AnsiString
Typ. Sie sind umwandelbar untereinander. Um den normalen Zeiger zu erhalten, rufen Sie die c_str
Methode, so wie du würde std::string
.
WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();