¿Cómo convierto Sistema :: WideString a un char *, y viceversa?
-
20-09-2019 - |
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 ++?
Solución
Puede utilizar la función wcstombs.
size_t wcstombs (char * mbstr, wchar_t const * wcstr, size_t max) ;
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();