网上有很多CString和char*之间的互转,但是都没有写的很清楚,有的是在多字节下的转换有的是在Unicode 下面的转换,导致转换出来乱码。通常情况下建议写代码的时候养成良好的习惯,都使用 Unicode 字符集,特记录下方便以后查阅
CString char2CString(char* ch)
{
int charLen = strlen(ch);
//计算多字节字符的大小,按字符计算。
int len = MultiByteToWideChar(CP_ACP, 0, ch, charLen, NULL, 0);
//为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小
TCHAR* buf = new TCHAR[len + 1];
//多字节编码转换成宽字节编码
MultiByteToWideChar(CP_ACP, 0, ch, charLen, buf, len);
buf[len] = '\0'; //添加字符串结尾,注意不是len+1
//将TCHAR数组转换为CString
CString strTemp;
strTemp.Append(buf);
//删除缓冲区
delete[]buf;
return strTemp;
}
char* CString2Char(CString str)
{
int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
char* sRvanle = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, str, -1, sRvanle, len, NULL, NULL);
return sRvanle;
}