Pregunta

Tengo una situación donde tengo que comparar un char* con un WideString.
¿Cómo se convierte el WideString a un char * en C ++?

¿Fue útil?

Solución

Otros consejos

WideCharToMultiByte () y < a href = "http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx" rel = "nofollow noreferrer"> MultiByteToWideChar () .

No es posible. En realidad, usted mezcló dos conceptos diferentes:

  • WideString implica un tampón en codificación UTF-16.
  • char * puede contener cualquier cosa, de UTF-8 a sólo texto ASCII (en cuyo caso, esto es convertible sólo si su widestring no contiene caracteres no ASCII).

Por favor, vea mi respuesta a https://stackoverflow.com/questions/1049947/ debe UTF-16 se considera perjudicial- sobre cómo manejar adecuadamente el texto.

comparar System::WideString objeto con un char* (como la cuestión cuerpo dice que quiere hacer), puede crear un nuevo objeto WideString desde el puntero y luego utilizar el operador == ordinaria. La clase tiene varios constructores, entre ellos uno para const char*.

char* foo = ...;
WideString bar = ...;
if (WideString(foo) == bar)
  std::cout << "They're equal!\n";

De hecho, siempre y cuando el objeto WideString está a la izquierda, usted ni siquiera necesita la llamada al constructor porque el puntero se convertirá automáticamente.

if (bar == foo) { ... }

conversión a WideString a un char* (como la cuestión título dice que quiere hacer), es posible considerar el uso de la tipo de AnsiString . Son convertibles entre sí. Para obtener el puntero normal, llame a la href="http://docwiki.embarcadero.com/VCL/en/System.AnsiStringT.c_str" rel="nofollow noreferrer"> c_str método , al igual que lo haría con std::string.

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
scroll top