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后面初始化变量就要用{}将这些语句括起来”
展开
 我来答
li668xiao
2011-03-12 · TA获得超过611个赞
知道小有建树答主
回答量:412
采纳率:61%
帮助的人:253万
展开全部
修改你vs2010下工程的属性,把使用unicode改成使用多字节字符就行了,可以直接编译孙鑫的例子。否则你要把字符转为unicode,要用api函数MultibyteToUnicode()转,_T是在编译时期由编译器负责转码的,而你的字符不是静态分配的,显然对你来说无用。
更多追问追答
追问
可是我在MSDN下没有找到MultibyteToUnicode()这个函数,只有MultiByteToModifiedUTF7(),两者是一样的吗?那如果用这个函数,能不能帮我把这段代码改一下?谢谢了
追答
我查了一下应该是MultiByteToWideChar这个函数。我记错了。
softcloud84071
2011-03-12 · 超过29用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:75.6万
展开全部
这个问题就是在2008以后的版本中指定字符类型的差异,因为2008以后都是默认为UNICODE
定义改为:TCHAR szChar[20];
不再使用sprintf,改为_stscanf
这样就可以了
追问
额,我也觉得sprintf有问题,不过改成_tprintf还是乱码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式