2

我有一种情况,我需要将 achar*与 a进行比较WideString
如何在 C++ 中将 WideString 转换为 char*?

4

4 回答 4

6

您可以使用 wcstombs 函数。

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

于 2009-12-17T23:59:32.543 回答
3

请参阅WideCharToMultiByte()MultiByteToWideChar()

于 2009-12-17T23:59:55.927 回答
2

要将对象与 a进行比较(正如问题主体所说的那样),您可以从指针创建一个新对象,然后使用普通运算符。该类有几个构造函数,包括一个用于.System::WideStringchar*WideString==const char*

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

事实上,只要WideString对象在左边,你甚至不需要构造函数调用,因为指针会自动转换。

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

要将a转换WideString为 a char*(正如问题标题所说的那样),您可以考虑使用该AnsiString类型。它们可以相互转换。要获取普通指针,请调用该c_str方法,就像使用std::string.

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
于 2009-12-18T02:46:37.853 回答
1

不可能。实际上,您混合了两个不同的概念:

  • Widestring 表示 UTF-16 编码的缓冲区。
  • char* 可能包含任何内容,从 UTF-8 到纯 ASCII 文本(在这种情况下,只有当您的宽字符串不包含非 ASCII 字符时才可转换)。

请参阅我对https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful的回答,了解如何正确处理文本。

于 2009-12-18T01:32:40.250 回答