好贷网好贷款

CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

发布时间:2016-12-3 8:22:27 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换",主要涉及到CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换方面的内容,对于CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换感兴趣的同学可以参考一下。

转自:http://www.cnblogs.com/qiyebao/archive/2011/12/01/2270843.html 一.CString与LPCWSTR     两者的不同:LPCWSTR 是Unicode字符串指针,初始化时串有多大,申请空间就有多大,以后存贮若超过则出现无法预料的结果,这是它与CString的不同之处。而CString是一个串类,内存空间类会自动管理。     CString转换成LPCWSTR     方法一:CString strFileName;     LPCWSTR lpcwStr = strFileName.AllocSysString();     方法二:CString str=_T("TestStr");                      USES_CONVERSION;                      LPCWSTR lpcwStr = A2CW((LPCSTR)str);     MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR)  -> (LPCWSTR),USER_CONVERSION表示用来定义一些中间变量,在使用ATL的转换宏之前必须定义该语句。     LPCWSTR转换成CString     LPCWSTR lpcwStr = L"TestWStr";      CString str(lpcwStr);  CString str; LPWSTR  lpstr = (LPWSTR)(LPCWSTR)str; 二.CString与LPSTR转换      CString转换成LPSTR:     方法一:CString strFileName;                     LPSTR lpStr = strFileName.GetBuffer();                     strFileName.ReleaseBuffer();      方法二:CString strFileName;                      LPSTR lpStr = (LPSTR)(LPCSTR)strFimeName;       LPSTR转换成CString:                       LPSTR lpStr = L"TestStr";                        CString str(lpStr);       注意:CString和LPCSTR可直接转换,如下:                      CString str;                      LPCSTR lpcStr = (LPCSTR)str; 三.CString和char*转换        CString转换成char*        方法一:CString str;                        char* p = str.GetBuffer();        方法二:CString str;                        char* p = (LPSTR)(LPCSTR)str;        char*转换成CString                        char* p = "test";                        CString str = ("%s",p); 四.String和int、float的转换         可以使用atoi,atof,atol等函数来完成。 五.LPSTR(char*)和LPWSTR的转换         可以使用下面的ATL宏来进行,最好是将变量定义成TCHAR、LPTSTR等T类型,可以避免转换。 ATL宏介绍:      A2BSTR   OLE2A             T2A            W2A       A2COLE   OLE2BSTR    T2BSTR    W2BSTR       A2CT         OLE2CA         T2CA          W2CA       A2CW        OLE2CT         T2COLE    W2COLE       A2OLE       OLE2CW       T2CW         W2CT       A2T            OLE2T            T2OLE        W2OLE       A2W           OLE2W          T2W             W2T     A :ANSI 字符串,也就是 MBCS。      W、OLE 宽字符串,也就是 UNICODE。      T 中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A      C const 的缩写 利用这些宏,可以快速的进行各种字符间的转换。使用前必须包含头文件,并且申明USER_CONVERSION;使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:     1、只适合于进行短字符串的转换;      2、不要试图在一个次数比较多的循环体内进行转换;      3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;      4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte(); void Func1(LPSTR lpStr); void Func2(LPWSTR lpwStr); TCHAR   name[256]; TCHAR*   pName = new  TCHAR[256]; Func1(name); // Func1(pName); Func2(name); // Func2(pName); 注意在VS2005中上面用红色标记的代码已经不成立。 VS2005中CString已经改为宽字符型,一些转换如下: char name[10];  TCHAR sex[5] ;  char *p = name;  TCHAR *pw = sex;  LPSTR lpstr = name;  LPCSTR lpcstr = name;  lpcstr = lpstr;    lpstr = p;  p = (char*)sex;  pw = (WCHAR*)name;  LPWSTR lpwstr = (LPWSTR)lpstr;  lpwstr = (LPWSTR)lpcstr;  LPCWSTR lpcwstr = (LPCWSTR)lpstr;  lpcwstr = (LPCWSTR)name;  CString str(lpstr);  CString str1(lpcstr);  CString str2(lpwstr);  CString str3(lpcwstr);  CString str4(name);  CString str5(sex);  lpwstr = (LPWSTR)(LPCWSTR)str;  lpstr = (LPSTR)(LPCWSTR)str;  lpcstr = (LPCSTR)(LPCWSTR)str;  p = (char*)str.GetBuffer();  pw = str.GetBuffer(); 可以看出转换更加简单了,基本上可以直接转换,A2W等宏基本上不需要啦

上一篇:泛型
下一篇:lua basic

相关文章

相关评论