文章类型: VC&C++
关键词: CString,LPCWSTR,LPSTR,char,*,LPWSTR,类型的转换
内容摘要: CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换

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

2017/8/25 11:43:36    来源:apple    阅读:

一.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等宏基本上不需要啦


六. char [] 转换为LPCTSTR

LPCTSTR 类型等同于 const unsigned short* 类型。

强制类型转换的例子:

LPCTSTR str = _T("宽字符");

char a[20] = "12345";

str = (LPCTSTR)a;//强制类型转换

↑ 上一篇文章:VC CString 转换 const char* 关键词:VC,CString,转换,const,char* 发布日期:2017/8/25 11:42:49
↓ 下一篇文章:VC中的error C4996:GetVersionExW 被声明为已否决 关键词:VC,C++,error,C4996,GetVersio.. 发布日期:2017/8/25 14:16:56
相关文章:
CString 和 LPCTSTR 之间的转换 及 LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化 关键词:CString,LPCTSTR,转换,LPSTR,LPWSTR,LPCSTR,LPCWSTR,L.. 发布日期:2016-08-04 15:12
VC++中LPCTSTR、CString、char *、string之间的相互转换 关键词:VC++,LPCTSTR,CString,char,*,string,相互,转换 发布日期:2017-08-30 17:12
VC 字符串的相互转换 CString 和 unsigned char* 关键词:如何将CString类型转换成unsigned,char,*类型,VC,字符串的相互转换,CSt.. 发布日期:2017-05-12 16:07
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......