之前就想总结一下CString和其他类型之间的转换问题,毕竟每次遇到都再去查真的有点麻烦,正好趁周末把它整理一下
CString转LPSTR
- 使用CString的成员函数(通用)
strSrc.GetBuffer(nSize);
比如说:
CString strDes = L"";
CString strSrc = L"abc";
HRESULT hRst = StringCchCopy(strDes.GetBuffer(strSrc.GetLength()), strSrc.GetLength()+1, strSrc);
- 关于StringCchCopy的使用可以看前面的 使用安全字符串操作函数 https://www.jianshu.com/p/e965c9dcd1b0
LPSTR转CString
- 可以直接用 =
LPSTR lpStr2 = "hello";
CString strTemp2;
strTemp2 = lpStr2;
- 用CString的构造
- 用MultiByteToWideChar:
CString strDes;
LPSTR lpStr = "123";
MultiByteToWideChar(CP_ACP, 0, lps, -1, (LPWSTR)strDes.GetBuffer(sizeof(lpStr )), sizeof(lpStr )+1);
CString转LPCSTR
- 强制类型转换+CString成员函数
LPCSTR lpStr = (LPCSTR)str.AllocSysString();//这个方法可以成功,但结果只有第一个字符
lpStr = (LPCSTR)str.GetBuffer(str.GetLength());//同上
LPCSTR转CString
- 使用CString的构造
LPCSTR lpStr = "test";
CString str(lpStr);
CString转LPWSTR
- 强制类型转换:
LPWSTR lpStr = (LPWSTR)(LPCTSTR)strSrc; - 使用A2W
这一项之后再加
CString 转LPCWSTR
- 用CString的成员函数(通用)
CString strSrc;
LPCWSTR str = strSrc.AllocSysString();//返回Whart_t* - 强制类型转换(适用于Unicode字符集)
CString转CStringA
- CStringA strA = CW2A(strW,CP_UTF8);