一、char*转为CString
如果工程使用多字节字符集
CString str;
char sz[]="你好!";
str.Format("%s",sz);//利用Format函数
str=(CString)sz; //强制转换
如果工程使用Unicode字符集
第一种是使用API函数MultiByteToWideChar进行转换
char * pFileName = "世界,你好!";
//计算char *数组的大小,以字节为单位,一个汉字占两个字节
int charLen = strlen(pFileName);
//计算多字节字符的大小,按字符计算
int len = MultiByteToWideChar(CP_ACP, 0, pFileName, charLen, NULL, 0);
//为宽字节字符数组申请空间大小,数组大小为按字节计算的多字节字符的大小
TCHAR *buf = new TCHAR[len + 1];
//多字节编码转换为宽字节编码
MultiByteToWideChar(CP_ACP, 0, pFileName, charLen, buf, len);
buf[len] = '\0';
//将TCHR数组转换为CString
CString str;
str.Append(buf);
//删除缓冲区
delete[]buf;
第二种方法是使用函数A2T或A2W;
char *p = "世界,你好!";
USES_CONVERSION;//这个宏在atlbase.h中定义
CString s = A2T(p);
CString s2 = A2W(p);
二、CString转为char*
如果工程使用多字节字符集
CString str="长城";
char *p=(LPSTR)(LPCTSTR)str;//强制转换
p=str.GetBuffer();
如果工程使用Unicode字符集
第一种是使用API函数WideCharToMutiByte进行转换
CString str = _T("世界,你好!");
//n以字符计算,len以字节计算,二者数值不同
int n = str.GetLength();
int len = WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), NULL, 0, NULL, NULL);
char * pFileName = new char[len + 1];
//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP, 0, str, str.GetLength(), pFileName, len, NULL, NULL);
pFileName[len] = '\0';//多字节字符串以\0结束
第二种方法是使用函数A2T或A2W;
CString str = _T("世界,你好!Hello World");
USES_CONVERSION;//这个宏在atlbase.h中定义
char *p = T2A(str);
char *q = W2A(str);