1

我需要将 WCHAR[] 放入 std::cout ...它是从 Native Wifi API 回调传递的 PWLAN_CONNECTION_NOTIFICATION_DATA 的一部分。

我尝试了简单的 std::cout << var; 但它会打印出第一个字符的数字地址。比较 ( var == L"some text") 也不起作用。调试器返回预期值,但比较返回 0。如何将此数组转换为标准字符串(std::string)?

提前致谢

4

4 回答 4

12

一些解决方案:

  • 改为写入 std::wcout
  • 转变:
    • 标准方式,使用 std::codecvt
    • Win32方式,使用WideCharToMultibyte
于 2009-10-26T15:44:29.837 回答
9

对于打印到cout,您应该std::wcout改用。

至于比较,我不太确定你的意思。

  • 如果var是 a wchar_t[],那么您正在比较两个指针。结果很可能是错误的,因为虽然字符串内容可能相同,但它们在物理上分配在不同的内存位置。答案是要么使用strcmp比较 C 风格字符串(字符指针)之类的函数,要么使用 C++ 字符串类。
  • 并且operator==通常返回 a bool,而不是整数。所以它可以返回false,但它不能返回0......除非你自己创造了一些奇怪的重载。(只有当var它是用户定义的类型时才有可能。
于 2009-10-26T15:46:26.743 回答
4

假设 var 是 a wchar_t *var == L"some text"进行指针比较。为了比较 var 指向的字符串,可以使用wcscmp.

于 2009-10-26T15:50:38.433 回答
3

使用以下

#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
于 2010-06-01T17:21:31.113 回答