Как мне преобразовать System :: WideString в char * и наоборот? - PullRequest
2 голосов
/ 18 декабря 2009

У меня есть ситуация, когда мне нужно сравнить char* с WideString.
Как мне преобразовать WideString в символ * в C ++?

Ответы [ 4 ]

6 голосов
/ 18 декабря 2009

Вы можете использовать функцию wcstombs.

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

3 голосов
/ 18 декабря 2009
1 голос
/ 18 декабря 2009

К сравнить a System::WideString объект с char* (так как вопрос body говорит, что вы хотите сделать), вы можете создать новый WideString объект из указателя и затем используйте обычный оператор ==. Класс имеет несколько конструкторов, в том числе один для const char*.

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

Фактически, пока объект WideString находится слева, вам даже не нужен вызов конструктора, потому что указатель будет преобразован автоматически.

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

В преобразовать a WideString в char* (поскольку вопрос title говорит, что вы хотите это сделать), вы можете использовать AnsiString* Тип 1028 *. Они конвертируемы между собой. Чтобы получить обычный указатель, вызовите метод c_str, как если бы вы использовали std::string.

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
1 голос
/ 18 декабря 2009

Не возможно. На самом деле, вы смешали два разных понятия:

  • Widestring подразумевает буфер в кодировке UTF-16.
  • char * может содержать что угодно, от UTF-8 до текста только для ASCII (в этом случае это может быть конвертировано, только если ваша широкая строка не содержит символы не ASCII).

Пожалуйста, смотрите мой ответ на https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful о том, как правильно обрабатывать текст.

...