以下是在vs2013、字符集为unicode的配置下测试成功:
LPCSTR lpStr="test";
CString str(lpStr);
2.CString转化为LPCSTR:
CString str("test");
LPCSTR lpStr = (LPCSTR)str;
3.const char * 转换为LPCSTR:_T()
4.从CString得到const char *:
CString str("ABC");
const char *ch = (LPCSTR)(LPCTSTR)str; LPCTSTR是把CString转CString指针,LPCSTR是把宽字符指针转单字节指针
5.从char *到CString:
char *str;
CString cstr(str);
6.格式化输出cstring长度的时候,要用_T把ANSI转换为宽字符,特别要注意:_T只能框住字符串,不能包含后面的参数
cstrTmp.Format(_T("uString length = %d"), uLen);
MessageBox(cstrTmp);
7.CString转std::string:
分两步:
1把cstring转为char数组
2根据char数组,构造自己的string(记得释放内存)
std::string CStringToSTDStr(const CString& theCStr)
{
const int theCStrLen = theCStr.GetLength();
char *buffer = (char*)malloc(sizeof(char)*(theCStrLen+1));
memset((void*)buffer, 0, sizeof(buffer));
WideCharToMultiByte(CP_UTF8, 0, static_cast<cstring>(theCStr).GetBuffer(), theCStrLen, buffer, sizeof(char)*(theCStrLen+1), NULL, NULL);
std::string STDStr(buffer);
free((void*)buffer);
return STDStr;
}
8.std::string转CString:
string str="abcde";
CString cstr(str.c_str());
9._T(str)
_T(str):_T只是一个强制类型转换的宏,并非一个编码转换函数,用于把ANSI转换为Unicode编码。
更多细节参见https://blog.csdn.net/GoForwardToStep/article/details/53079967