CString string char之间的转换.docx
文本预览下载声明
1 string to CString???
??CString.format(%s,string.c_str());?
2 CString to string
string str(CString.GetBuffer(str.GetLength()));
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char,CString,sizeof(char));
6 char * to CString
CString.format(%s,char*);
?CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。
?
以上函数UNICODE编码也没问题:unicode下照用,加个_T()宏就行了,像这样子_T(%s)
?
?
补充:
CString 可能是 CStringW/CStringA,在与 string 转换时,如果是 CStringW,还涉及编码转换问题。下面以 CStringA 来说明。
?
1 string to CString??
CString.format(%s,string.c_str());
?
CStringA = string.c_str() 就可以了
?
2 CString to string
string str(CString.GetBuffer(str.GetLength()));
?
GetBuffer 有参数的话,可能导致内部的分配空间动作,要进行后续 ReleaseBuffer 操作。
string = CStringA
string = CStringA.GetBuffer();
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char?*,CString,sizeof(char));
按照 3 风格,这里应该 char *? = CStringA; 或者 char *p = CStringA.GetBuffer();
?
6 char * to CString
CStringA = char * 就可以了
char* 和LPSTR等价,就是普通的字符串。2) W的意思是Width,带W的都是宽字符串,在UNICODE的环境下使用,也就是一个字符占两个字节,有wchar_t, LPWSTR, LPCWSTR, CStringW3) C的意思Const,带C的都是常量字符串,不可修改,有LPCSTR, LPCTSTR, LPCWSTR。4) T的意思是自适应,带T的可以在UNICODE和非UNICODE两种环境下使用,在UNICODE环境下就是宽字符串,在非UNICODE环境下就是窄字符串,有LPTSTR,LPCTSTR。5) CString是MFC的字符串类,他不是基本类型,而是对字符串的封装,他是自适应的,在UNICODE环境下就是CStringW,在非UNICODE环境下就是CStringA
不是说你在 UNICODE 环境下 写源程序,而是指你的程序要去 处理 UNICODE 文件和 字符串。无论怎样,C/C++ 源程序 要用 ASCII 来写,不能写成 UNICODE。如果你的编译器 和 系统 支持 UNICODE, 程序里的 字符串 也许可以写成 UNICODE。如果 你 的 C/C++ 源程序,要用于 读写 UNICODE 文件,你的程序 开始加 宏:#define _UNICODEchar 类型 用 TCHAR 类型字符转换 用到 _T 或 _TEXT( 还有一些 其它 注意事项,你要看一下帮助文件)有了 #define UNICODE 编译器知道如何处理 MessageBox ()多字节 改用 宏 #define _MBCS就可以了。
1、用THCAR代替char2、字符串加_T(),如_T(你好)3、用_tcscpy等代替strcpy等ANSI操作函数以str开头,如strcpy(),strcat(),strlen();Unicode操作函数以wcs开头,如wcscpy,wcscpy(),wcslen();ANSI/Unicode互为兼容的操作函数以_tcs开头?_tcscpy(C运行期库);ANSI/Unicode互为兼容的操作函数以lstr开头?lstrcpy(Wi
显示全部