【问题标题】:C++, WCHAR[] to std::cout and comparisionC++,WCHAR[] 到 std::cout 和比较
【发布时间】:2010-12-10 04:16:56
【问题描述】:

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

我只是简单地尝试了 std::cout var == L"some text") 也不起作用。调试器返回预期值,但比较返回 0。如何将此数组转换为标准字符串(std::string)?

提前致谢

【问题讨论】:

  • 比较 "some text"=="some text" 可能已经失败,与普通 char*。原因:您可以将 C 中的字符串与== 进行比较。使用 C++; std::wstring(L"text")==std::wstring(L"text")

标签: c++ winapi wchar-t widechar


【解决方案1】:

一些解决方案:

  • 改为写入 std::wcout
  • 转换:
    • 标准方式,使用 std::codecvt
    • Win32 方式,使用 WideCharToMultibyte

【讨论】:

    【解决方案2】:

    要打印到cout,您应该改用std::wcout

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

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

    【讨论】:

    • 我猜你的意思是wcscmp? C++ 真的应该重载strcmp() 来接受任何类似字符串的东西。但不幸的是,只有标准 C 库的数学部分得到了这种处理。
    • 是的。我的意思是“strcmp 系列函数”。这就是我说“类似函数”的原因。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      使用下面的

      #ifdef UNICODE
      #define tcout wcout
      #else
      #define tcout cout
      #endif
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-23
        • 2020-07-12
        • 2011-11-06
        • 2018-05-31
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        相关资源
        最近更新 更多