MFC工程中的字符集问题,主要体现在字符串中包含中文时,CString与const char*的转换上,在此把自己遇到的问题及解决方法稍微记录一下,以便以后查阅。
首先说明一下 LPCTSTR 是什么东西。
1.LP 表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.
2.C 表示const;
3.T 是什么东西呢,我们知道TCHAR在采用 UNICODE 方式编译时是wchar_t, 在普通时编译成char.
那么就可以看出 LPCTSTR(PCTSTR) 在UINCODE时是 const wchar_t * , 在多字节字符模式时是 const char * .
接下来我们看如何把CString转换成const char*.
(1)如果工程属性为Unicode, 问题就要简单的多,LPCTSTR就等于const char*, 在上面我们刚刚讲过,系统会在编译时自动判断。
CString转换成const char*则可以使用以下方法,通常情况下不会有问题:
CString cstring;
const char * constChar=(LPCTSTR)cstring;
或者可直接把CString变量赋值给const char* 和 LPCTSTR变量,MFC编绎器会自动地使用LPCTSTR把CString转换成const char*如:
CString str="hello,你好!";
AfxMessageBox(str); //AfxMessageBox(LPCTSTR str,......) ;
test(str); //test(con