Domanda

Ho una situazione in cui ho bisogno per confrontare un char* con un WideString.
Come faccio a convertire il WideString ad un char * in C ++?

È stato utile?

Soluzione

È possibile utilizzare la funzione wcstombs.

size_t wcstombs (char * mbstr, wchar_t const * wcstr, size_t max) ;

Altri suggerimenti

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

Non è possibile. In realtà, è mescolato due concetti diversi:

  • WideString implica un buffer nella codifica UTF-16.
  • char * può contenere qualsiasi cosa, da UTF-8 a testo ASCII-sola (nel qual caso, questo è convertibile solo se il WideString non contenga caratteri non ASCII).

Si prega di vedere la mia risposta a https://stackoverflow.com/questions/1049947/ dovrebbe UTF-16-essere-considerato nocivo su come gestire correttamente il testo.

confrontare System::WideString oggetto con un char* (come la questione corpo dice che si vuole fare), è possibile creare un nuovo oggetto WideString dal puntatore e quindi utilizzare operatore == ordinario. La classe ha diversi costruttori, tra cui uno per const char*.

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

In realtà, fino a quando l'oggetto WideString si trova sulla sinistra, non è nemmeno necessario la chiamata al costruttore, perché il puntatore sarà convertito automaticamente.

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

conversione un WideString ad un char* (come la questione titolo dice che si vuole fare), si potrebbe considerare l'utilizzo di tipo AnsiString . Sono convertibili tra loro. Per ottenere il puntatore ordinario, chiamare il href="http://docwiki.embarcadero.com/VCL/en/System.AnsiStringT.c_str" rel="nofollow noreferrer"> c_str metodo std::string.

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top