//unicode 下 string 转 char*
c_str()返回一个c风格的字符数组,带有'\0'结束
data()返回一个数组,不自动增加‘\0’
string s1 = "hello world";
const char * p = s1.c_str();
//unicode 下 CString 转 char*
char* Cstring2Char(CString& str)
{
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'结束
return pFileName;
}
//unicode 下 char* 转 CString
CString CharToCString(char *cArray)
{
CString strSource;
DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, cArray, -1, NULL, 0);
wchar_t *pwText;
pwText = new wchar_t[dwNum];
if (!pwText)
{
delete[] pwText;
}
MultiByteToWideChar(CP_ACP, 0, cArray, -1, pwText, dwNum);
strSource = pwText;
delete[] pwText;
return strSource;
}
//unicode 下 string 转 CString
CString String2Cstring(std::string str)
{
int length = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1,
NULL, 0);
WCHAR *wstr = new WCHAR[length];
MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, wstr, length);
CString retStr = wstr;
delete[] wstr;
return retStr;
}
//unicode 下 CString 转 string
std::string Cstring2String(CString& str)
{
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'结束
std::string retStr = pFileName;
delete[] pFileName;
return retStr;
}
MFC Unicode 下 CString 与char*、CString 转 string 相互转换
于 2022-03-31 15:17:39 首次发布