小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

CString與LPCWSTR、LPSTR、char*、LPWSTR等類型的轉(zhuǎn)換

 @IT小小鳥@ 2012-02-16


一.CString與LPCWSTR 

    兩者的不同:LPCWSTR 是Unicode字符串指針,初始化時(shí)串有多大,申請(qǐng)空間就有多大,以后存貯若超過則出現(xiàn)無法預(yù)料的結(jié)果,這是它與CString的不同之處。而CString是一個(gè)串類,內(nèi)存空間類會(huì)自動(dòng)管理。

    CString轉(zhuǎn)換成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的轉(zhuǎn)換宏之前必須定義該語句。

    LPCWSTR轉(zhuǎn)換成CString

    LPCWSTR lpcwStr = L"TestWStr"; 
    CString str(lpcwStr);

二.CString與LPSTR轉(zhuǎn)換

     CString轉(zhuǎn)換成LPSTR:

    方法一:CString strFileName;

                    LPSTR lpStr = strFileName.GetBuffer();

                    strFileName.ReleaseBuffer();

     方法二:CString strFileName;

                     LPSTR lpStr = (LPSTR)(LPCSTR)strFimeName;

      LPSTR轉(zhuǎn)換成CString:

                      LPSTR lpStr = L"TestStr"; 
                      CString str(lpStr);

      注意:CString和LPCSTR可直接轉(zhuǎn)換,如下:

                     CString str;

                     LPCSTR lpcStr = (LPCSTR)str;

三.CString和char*轉(zhuǎn)換
       CString轉(zhuǎn)換成char*
       方法一:CString str;
                       char* p = str.GetBuffer();
       方法二:CString str;
                       char* p = (LPSTR)(LPCSTR)str;
       char*轉(zhuǎn)換成CString
                       char* p = "test";
                       CString str = ("%s",p);

四.String和int、float的轉(zhuǎn)換

        可以使用atoi,atof,atol等函數(shù)來完成。

五.LPSTR(char*)和LPWSTR的轉(zhuǎn)換

        可以使用下面的ATL宏來進(jìn)行,最好是將變量定義成TCHAR、LPTSTR等T類型,可以避免轉(zhuǎn)換。

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(wǎng);如果定義了 _MBCS,則T表示A 
    C const 的縮寫

利用這些宏,可以快速的進(jìn)行各種字符間的轉(zhuǎn)換。使用前必須包含頭文件,并且申明USER_CONVERSION;使用 ATL 轉(zhuǎn)換宏,由于不用釋放臨時(shí)空間,所以使用起來非常方便。但是考慮到??臻g的尺寸(VC 默認(rèn)2M),使用時(shí)要注意幾點(diǎn):

    1、只適合于進(jìn)行短字符串的轉(zhuǎn)換; 
    2、不要試圖在一個(gè)次數(shù)比較多的循環(huán)體內(nèi)進(jìn)行轉(zhuǎn)換; 
    3、不要試圖對(duì)字符型文件內(nèi)容進(jìn)行轉(zhuǎn)換,因?yàn)槲募叽缫话闱闆r下是比較大的; 
    4、對(duì)情況 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中上面用紅色標(biāo)記的代碼已經(jīng)不成立。

VS2005中CString已經(jīng)改為寬字符型,一些轉(zhuǎn)換如下:

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();

可以看出轉(zhuǎn)換更加簡單了,基本上可以直接轉(zhuǎn)換,A2W等宏基本上不需要啦。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多