所以在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 *上执行切换案例。
感谢您的光临。
答案 0 :(得分:2)
您也无法在char *上执行切换。 (但是当你真的需要将WCHAR *转换为char *时,请使用WideCharToMultiByte)
您需要使用if / else if lstrcmpi,CompareString或其他字符串比较功能。
答案 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 .. 希望这会有所帮助;)