• <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++
            久久久久人妻一区二区三区vr| 伊人久久五月天| 久久噜噜电影你懂的| 国产巨作麻豆欧美亚洲综合久久 | 国内精品久久国产大陆| 99久久精品免费| 狠狠色综合网站久久久久久久高清 | 国产免费久久久久久无码| 久久婷婷五月综合97色直播| 亚洲精品高清国产一线久久| 91亚洲国产成人久久精品| 久久人人爽人人爽人人片AV高清| 久久久免费精品re6| 怡红院日本一道日本久久| 久久精品国产亚洲5555| 9久久9久久精品| 一本一道久久综合狠狠老| 国产午夜福利精品久久| 色88久久久久高潮综合影院| 久久影院亚洲一区| 久久91综合国产91久久精品| 久久综合亚洲色一区二区三区| 久久精品一区二区影院| 秋霞久久国产精品电影院| 亚洲狠狠婷婷综合久久久久| 久久亚洲视频| 久久午夜综合久久| 久久精品亚洲乱码伦伦中文| 66精品综合久久久久久久| 丰满少妇人妻久久久久久| 婷婷综合久久中文字幕蜜桃三电影| 伊人伊成久久人综合网777| 精品熟女少妇aⅴ免费久久| 久久777国产线看观看精品| 精品乱码久久久久久久| 久久青青草原亚洲av无码app| 亚洲综合伊人久久大杳蕉| 77777亚洲午夜久久多人| 久久久久久曰本AV免费免费| 久久久精品国产免大香伊 | 伊人伊成久久人综合网777|