Pergunta

Eu tenho uma situação em que preciso comparar um char* com um WideString.
Como converto o wideestring em um char* em C ++?

Foi útil?

Solução

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top