CString类型转char类型出现中文乱码问题

一般来说CString类型的变量具有很强的操作性,但有时为了使用某些c函数,必须将CString类型的变量转换为char数组类型。关于CString转char的方法,网上查了查,发现大都没介绍清楚,这里写出来做个小结,加深下印象。

为完成他们之间的转换,首先得说明一下他们所占的内存大小。CString属于所谓的宽字符集,占一个字符占两个字节; char类型属于窄字符集,一个char字符占一个字节。故他们之间的转换涉及到字节大小的转换。另一方面MFC中Ctring,默认采用unicode编码,而char采用ansi编码,两种编码中单个字符占的存储大小也是不同的。

将CString转char,会用到一个函数 WideCharToMultiByte, 其实unicode与utf-8的互转,unicode与ansi的互转,均可以利用此函数完成,该函数的原型为

int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr,int cchMultiByte, LPCSTR lpDefaultStr, LPBOOL lpUsedDefaultChar);

该函数的参数介绍就不说了,多看几次就记住了。CString变量中有中文等多字节字符,就要注意CodePage的类型,如果要写出到文件,还要注意转换的编码和文件的编码一致,不然打开仍然乱码。下面贴出简短代码

1 CString tmp(_T("程序猿"));        // 待转换CString变量
2 wchar_t *ptr;           
3 char buf[16];        // 目标存储空间
4
5 ptr=tmp.GetBuffer(tmp.GetLength()*sizeof(wchar_t));
6 WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/42b361bc85703b7202704bfb45072579.html