• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 131, comments - 12, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            CString與LPCWSTR、LPSTR、char*、LPWSTR等類型的轉換【轉】

            CString與LPCWSTR、LPSTR、char*、LPWSTR等類型的轉換

            VC++ 2010-09-25 21:23:12 閱讀457 評論3   字號: 訂閱

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

            (摘自)

            http://blog.csdn.net/sl159/article/details/6412171

            標簽: C++
            亚洲成色WWW久久网站| 亚洲综合伊人久久综合| 久久一区二区三区99| 亚洲一区精品伊人久久伊人 | 亚洲午夜福利精品久久| 国产亚洲婷婷香蕉久久精品| 久久久久久国产a免费观看不卡 | 亚洲国产视频久久| 99久久er这里只有精品18| 精品人妻伦一二三区久久| 亚洲国产一成人久久精品| 青青草原综合久久大伊人| 99热成人精品热久久669| 亚洲午夜久久久影院| 久久人人爽人人爽人人片AV高清 | 欧美久久精品一级c片片| 久久久久亚洲精品中文字幕| 99久久精品九九亚洲精品| 色综合久久最新中文字幕| 久久男人中文字幕资源站| 久久婷婷久久一区二区三区| 免费观看久久精彩视频| 噜噜噜色噜噜噜久久| 久久se精品一区精品二区国产| 老男人久久青草av高清| 亚洲国产精品久久久久婷婷老年 | 色婷婷噜噜久久国产精品12p| 少妇久久久久久被弄高潮| 亚洲国产精品无码久久一线| 国产精品久久久久久| 久久er国产精品免费观看8| 久久天天躁狠狠躁夜夜躁2014| 97久久久精品综合88久久| 伊人久久大香线蕉亚洲| 一本一道久久精品综合| 亚洲国产精品无码久久| 久久人妻少妇嫩草AV无码蜜桃| 国产成人无码精品久久久久免费| 69久久夜色精品国产69| 国产精品久久99| 国产69精品久久久久99|