WCHAR与CHAR的转换

来源:互联网 发布:2007詹姆斯数据 编辑:程序博客网 时间:2024/05/22 00:42

如果工程属性chart set项有两种字符编码方式:Multi-Byte 、Unicode。

不同的编码方式对字符的处理方式是不同的。

今天在编码的时候出现字符编码转换的问题,解决后记录为此博文。


用到一个函数,它的参数必须是char*类型,而我工程属性设置了Unicode(默认)。

如果强制类型转换:

CString s = “abc”;

char *ch;

ch = (cahr*)s.GetBuffer(s.GetLength);  //or ch = (LPCSTR)(LPCTSTR)s;

这样得到的ch = “a0b0c0”;

s中的‘a’占两个字节,转换到ch中'a'占一个字节。

strlen(ch) == 1;


为解决以上问题,找到以下的方法:WideCharToMultiByte() / MultiByteToWideChar()


CString s = ”abc“;

char  msg[1024];
wchar_t* wmsg = s.GetBuffer(s.GetLength());
WideCharToMultiByte(CP_ACP,0,wmsg,s.GetLength(),msg,1024,NULL,NULL);
msg[s.GetLength()] = '\0';