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?

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top