最近在做MFC的项目,遇到CString和char*互转的问题,项目中的字符集使用的是Unicode 字符集,遇到一些问题,记录一下。
MFC项目中的字符集可以设置两种:Unicode 字符集和多字节字符集。使用不同的字符集CString和char*互转的方式也不相同。
1、Unicode 字符集下CString和char*互转
CString转char*:使用WideCharToMultiByte()函数,该函数可以映射一个unicode字符串到一个多字节字符串。WideCharToMultiByte第四个参数为-1时,返回的长度值包含字符串终结符"\0",这样在第二次使用时就可以将“\0”也转换了。
CString strTemp =_T("abc");
int length =WideCharToMultiByte(CP_ACP,0,strTemp,-1,NULL,0,NULL,NULL);
char* pTemp =new char[length];
WideCharToMultiByte(CP_ACP,0,strTemp,-1,pTemp,length,NULL,NULL);
char*转CString:
char* pTemp = "1234";
CString strTemp(pTemp);
2、多字节字符集下CString和char*互转
CString转char*:
//方式1
CString strTemp ="1234";
char *pTemp =(LPSTR)(LPCSTR)strTemp;
//方式2
CString strTemp ="1234";
char *pTemp = strTemp.GetBuffer(strTemp.GetLength());
strTemp.ReleaseBuffer();
char*转CString:
char* pTemp = "1234";
CString strOut(pTemp);