Как преобразовать System::WideString в символ* и наоборот?

StackOverflow https://stackoverflow.com/questions/1925422

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top