Как преобразовать System::WideString в символ* и наоборот?
-
20-09-2019 - |
Вопрос
У меня возникла ситуация, когда мне нужно сравнить char*
с WideString
.
Как преобразовать WideString в символ* в C++?
Решение
Вы можете использовать функцию wcstombs.
size_t wcstombs( char * mbstr, const wchar_t * wcstr, size_t max );
Другие советы
Видеть WideCharToMultiByte() и Мультибайтовидечар().
Невозможно.На самом деле вы смешали два разных понятия:
- 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();