• <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++
            国产精品99久久精品爆乳| 97久久婷婷五月综合色d啪蜜芽| 无码专区久久综合久中文字幕| 久久国产乱子伦免费精品| 日本久久中文字幕| 四虎国产永久免费久久| 日日躁夜夜躁狠狠久久AV| 色99久久久久高潮综合影院| 少妇久久久久久被弄高潮| 国产精品成人久久久久三级午夜电影 | 国产午夜精品久久久久九九| 久久亚洲精品中文字幕三区| 久久久久亚洲AV无码专区桃色| 中文字幕成人精品久久不卡 | 久久久免费精品re6| 精品无码久久久久久国产| 国产情侣久久久久aⅴ免费| 伊人久久综合无码成人网| 日韩精品国产自在久久现线拍 | 久久精品国产2020| 亚洲va中文字幕无码久久 | 久久久久久国产精品无码下载 | 99久久综合狠狠综合久久| 狠狠色婷婷久久综合频道日韩 | 伊人久久大香线蕉影院95| 色狠狠久久AV五月综合| 久久人人爽人人爽人人片av麻烦 | 国产精品岛国久久久久| 久久婷婷国产麻豆91天堂| 久久无码人妻一区二区三区午夜| 久久综合偷偷噜噜噜色| 欧洲精品久久久av无码电影 | 久久久亚洲欧洲日产国码aⅴ| 国产精品久久久久久久app| 无码伊人66久久大杳蕉网站谷歌| 久久精品国产99国产精品| 精品久久久久久国产牛牛app| 99久久国产综合精品五月天喷水| 久久这里只精品国产99热| 精品国产综合区久久久久久| 久久久网中文字幕|