VC++里关于字符转化的问题
孙鑫老师的教程里,第一课的程序里有:charszChar[20];sprintf(szChar,"charis%d",wParam);MessageBox(hwnd,sz...
孙鑫老师的教程里,第一课的程序里有:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"weixin",0);
我用的是Visual Studio 2010,里面默认的字符集是Unicode 字符集,上面的程序只能在多字节字符集实现。如果进行强制类型转化:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,(LPCWSTR)szChar,"weixin",0);
又会出现乱码,要使用_T等方式sprintf又不能用。。。
请高手指点,感激不尽!
我需要的是除了 vs2010下工程的属性->使用unicode改成使用多字节字符 的方法,因为对字符转化不是很懂,不想蒙混过关。
总结:
MultiByteToWideChar确实可以帮助解决字符转换问题,但是
正如二楼所说的,printf也有问题,不过改成_tprintf也无济于事,依旧乱码,个人觉得不可思议,具体什么原因还没搞懂。
最后我是这样解决的:
case WM_CHAR:
{
WCHAR szChar[20] = {_T("the char is !")};
szChar[11]= wParam;
MessageBox(hwnd,szChar,_T("weixin"),MB_OK);
break;
}
//case的大括号要加上,因为“case后面初始化变量就要用{}将这些语句括起来” 展开
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"weixin",0);
我用的是Visual Studio 2010,里面默认的字符集是Unicode 字符集,上面的程序只能在多字节字符集实现。如果进行强制类型转化:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,(LPCWSTR)szChar,"weixin",0);
又会出现乱码,要使用_T等方式sprintf又不能用。。。
请高手指点,感激不尽!
我需要的是除了 vs2010下工程的属性->使用unicode改成使用多字节字符 的方法,因为对字符转化不是很懂,不想蒙混过关。
总结:
MultiByteToWideChar确实可以帮助解决字符转换问题,但是
正如二楼所说的,printf也有问题,不过改成_tprintf也无济于事,依旧乱码,个人觉得不可思议,具体什么原因还没搞懂。
最后我是这样解决的:
case WM_CHAR:
{
WCHAR szChar[20] = {_T("the char is !")};
szChar[11]= wParam;
MessageBox(hwnd,szChar,_T("weixin"),MB_OK);
break;
}
//case的大括号要加上,因为“case后面初始化变量就要用{}将这些语句括起来” 展开
2个回答
展开全部
修改你vs2010下工程的属性,把使用unicode改成使用多字节字符就行了,可以直接编译孙鑫的例子。否则你要把字符转为unicode,要用api函数MultibyteToUnicode()转,_T是在编译时期由编译器负责转码的,而你的字符不是静态分配的,显然对你来说无用。
更多追问追答
追问
可是我在MSDN下没有找到MultibyteToUnicode()这个函数,只有MultiByteToModifiedUTF7(),两者是一样的吗?那如果用这个函数,能不能帮我把这段代码改一下?谢谢了
追答
我查了一下应该是MultiByteToWideChar这个函数。我记错了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询