【问题标题】:How do I convert a WCHAR * to a regular string?如何将 WCHAR * 转换为常规字符串?
【发布时间】:2011-05-12 05:33:00
【问题描述】:

所以在 Win32 API 中,我的 main 函数是这样定义的:

wmain(int argc, WCHAR* argv[])

我正在向它传递一些参数,并且我想根据参数的值执行一个 switch case,就像这样。

wmain(int argc, WCHAR* argv[])
{
    char* temp = argv[];
    switch (temp) {
    case "one": blah blah;
...
}

当然, temp=argv[] 不起作用,我正在寻找转换它的建议。现在我有一个 if-else-if 的事情,而且效率非常低!

我需要转换它的原因是因为我无法在 WCHAR* 上执行 switch case。

感谢收看。

【问题讨论】:

    标签: windows winapi casting wchar


    【解决方案1】:

    您也不能在 char* 上执行开关。 (但当你确实需要将 WCHAR* 转换为 char* 时,请使用 WideCharToMultiByte)

    您需要使用 if/else if 与 lstrcmpi、CompareString 或其他一些字符串比较函数。

    或者,使用argtable 或getopt 等参数解析器库之一

    【讨论】:

    • 目前我用的是if/else,但是有25个条件,效率极低。另外,我不允许使用第三方库。还有其他建议吗?
    • 如果你想使用一个糟糕的开关,你可能会散列输入参数并为 case 语句使用预先计算的散列。
    • 有一个更简单的方法:ATL 转换宏 - T2A()
    【解决方案2】:

    我不确定这是否是个好主意。 WCHAR* 可能包含无法以有意义的方式映射到 char* 的 unicode 字符。如果您想忽略这一点,http://www.codeguru.com/forum/showthread.php?t=336106 有一个论坛帖子,其中有一些关于从 WCHAR* 转换为 char* 的建议。

    【讨论】:

    • OP 试图将 ASCII 字符转换为数字。他从命令行的 WCHAR* 开始。他不太可能在控制台中输入任何日文字符!
    【解决方案3】:

    尝试将它从 std::wstring 转换为 std::string,很简单,也许有更短的方法。

    使用 std::wstring 构造器将 WCHAR* 转换为 std::wstring,然后使用 std::wstring 方法之一转换为 std::String

    【讨论】:

      【解决方案4】:

      这是我前段时间写的一个简单示例。

      创建一个新的 win32 控制台应用程序并选择 ATL 支持。添加这个并编译/运行...

      #include "stdafx.h"
      #include <iostream>
      
      using namespace std;
      
      
      int _tmain(int argc, _TCHAR* argv[])
      {
      // A _TCHAR is a typedef'd, depending on whether you've got a unicode or MBCS build
      
      // ATL Conversion macros are documented here
      // http://msdn.microsoft.com/en-us/library/87zae4a3(VS.80).aspx
      // Declare USES_CONVERSION in your function before using the ATL conversion macros
      // e.g. T2A(), A2T()    
      USES_CONVERSION;
      
      TCHAR* pwHelloWorld = _T("hello world!");
      wcout << pwHelloWorld << endl;
      
      // convert to char
      char* pcHelloWorld = T2A(pwHelloWorld);
      cout << pcHelloWorld << endl;
      
      
      cin.get();
      
      return 0;
      }
      

      当然,您不能打开字符串,但这应该会为您提供将 WCHAR 读入 char 所需的信息。从那里,您可以很容易地转换为 int .. 希望这会有所帮助;)

      【讨论】:

        猜你喜欢
        • 2013-10-22
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        • 2013-11-08
        • 2011-05-23
        • 2021-10-13
        • 2016-12-10
        相关资源
        最近更新 更多