• <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 轉換宏,由于不用釋放臨時空間,所以使用起來非常方便。但是考慮到??臻g的尺寸(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++
            久久久久久国产精品美女| 久久久av波多野一区二区| 国内精品久久久久影院老司| 精品国产乱码久久久久久呢| 国产成人精品久久免费动漫| 精品久久人人爽天天玩人人妻| 香蕉久久影院| 久久精品国产亚洲网站| 中文字幕日本人妻久久久免费| 色综合久久久久| 性高湖久久久久久久久| 久久婷婷色综合一区二区| 久久综合久久久| 久久国产精品99精品国产| 99精品国产免费久久久久久下载| 亚洲国产精品久久久久婷婷老年| 7777精品久久久大香线蕉 | 久久国产高清字幕中文| 青青草原综合久久大伊人| 久久精品国产一区二区三区不卡| 蜜臀久久99精品久久久久久小说 | 国内精品久久久久久久久| 国产亚洲色婷婷久久99精品| 精品久久久久久久久免费影院| 精品熟女少妇aⅴ免费久久| 99久久精品午夜一区二区| 久久夜色精品国产噜噜噜亚洲AV| 热99RE久久精品这里都是精品免费| 久久中文精品无码中文字幕| 久久精品国产福利国产琪琪| 狠狠色伊人久久精品综合网 | 国产精品女同久久久久电影院| 国产精品久久久久蜜芽| 伊人久久大香线蕉无码麻豆| 欧美成a人片免费看久久| 久久综合伊人77777| 久久乐国产综合亚洲精品| 精品久久久久成人码免费动漫 | 中文精品久久久久国产网址| 精品久久久久久亚洲| 99久久精品国产一区二区蜜芽|