如何将WCHAR *转换为常规字符串?

时间:2010-11-18 18:53:57

标签: windows winapi casting wchar

所以在Win32 API中,我定义了我的主函数:

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 *上执行切换案例。

感谢您的光临。

4 个答案:

答案 0 :(得分:2)

您也无法在char *上执行切换。 (但是当你真的需要将WCHAR *转换为char *时,请使用WideCharToMultiByte)

您需要使用if / else if lstrcmpiCompareString或其他字符串比较功能。

或者,使用其中一个参数解析器库,如argtablegetopt

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

创建一个新的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 .. 希望这会有所帮助;)