CString,string,char*转换
首先假设这里CString
是CStringA
,之后再讨论CStringW
的转换.
string
=>CString
string str;
CString cstr;
cstr.format("%s",str.c_str());
CString
=>string
CString cstr;
string str(cstr.GetBuffer(str.GetLength()));
string
=>char *
string str;
char *szstr = str.c_str();
char*
=>String
char *szstr;
string str(szstr);
CString
=>char*
CString cstr;
char szstr[50];
strcpy(szstr,cstr,sizeof(szstr))
或者
sprintf(szstr,"%s",cstr)
char *
=>CString
CString cstr;
char *szstr;
cstr.format("%s",szstr);
注意以上函数对于Unicode
编码时,CString
为CStringW
.char *
为wchar_t*
.都为宽字符,仍然适用.只不过是每个字符占用2个字节而已.
CStringW
转换为 char*
:
- 方法一
用sprintf
,%ls
,和%S
同样,是指向wchar_t*
宽字符串的,sprintf
将其转换为char*
字符串.
char sztest[50];
CStringW strW;
sprintf(sztest,"%ls",strW)
- 方法二
先从CStringW
转到CStringA
,再从CStringA
转到char *
.
CStringW OrigStr = _T("Some String");
CStringA strToCovert(OrigStr);
char *strConverted = (char *)(LPCSTR)strToCovert;