Como faço para converter o sistema :: wideestring em um char* e vice -versa?
-
20-09-2019 - |
Pergunta
Eu tenho uma situação em que preciso comparar um char*
com um WideString
.
Como converto o wideestring em um char* em C ++?
Solução
Você pode usar a função wcstombs.
size_t wcstombs (char * mbtr, const wchar_t * wcstr, size_t max);
Outras dicas
Não é possivel. Na verdade, você misturou dois conceitos diferentes:
- O WideString implica um buffer na codificação UTF-16.
- O CHAR* pode conter qualquer coisa, do UTF-8 ao texto de ASCII (nesse caso, isso é convertível apenas se o seu WideString não contiver caracteres não-ASCII).
Por favor, veja minha resposta para https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful sobre como lidar adequadamente com o texto.
Para comparar uma System::WideString
objeto com a char*
(Como a pergunta corpo diz que você quer fazer), você pode criar um novo WideString
objeto do ponteiro e depois use comum ==
operador. A classe tem vários construtores, incluindo um para const char*
.
char* foo = ...;
WideString bar = ...;
if (WideString(foo) == bar)
std::cout << "They're equal!\n";
De fato, desde que o WideString
O objeto está à esquerda, você nem precisa da chamada do construtor porque o ponteiro será convertido automaticamente.
if (bar == foo) { ... }
Para converter uma WideString
para um char*
(Como a pergunta título diz que você quer fazer), você pode considerar usar o AnsiString
modelo. Eles são conversíveis entre si. Para obter o ponteiro comum, chame o c_str
método, assim como você faria com std::string
.
WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();