文档详情

CString string char之间的转换.docx

发布:2017-05-25约2.07千字共3页下载文档
文本预览下载声明
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, CStringW 3) 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 _UNICODE char 类型 用 TCHAR 类型 字符转换 用到 _T 或 _TEXT ( 还有一些 其它 注意事项,你要看一下帮助文件) 有了 #define UNICODE 编译器知道如何处理 MessageBox () 多字节 改用 宏 #define _MBCS 就可以了。 1、用THCAR代替char 2、字符串加_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
显示全部
相似文档