• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            C++的三種字符編碼方式

            c++通常使用的是三種編碼方式,分別是SBCS(single byte character set),MBCS(multi-byte characterset)Unicode字符集。SBCS是一個字節一個字符,MBCS是幾個字節一個字符,可能是一個,兩個,三個不等,但是實際上,絕大多數時候使用兩個字節的,所以有時候看到DBCS(double-byte character set)代替MBCS也不奇怪;Unicode一律是兩個字節編碼。在windows nt內核中,API一律使用的是unicode編碼,所以如果你在編寫軟件過程中使用非unicode編碼方式,系統也會自動轉換成unicode執行,然后返回的結構再轉換為你使用的類型。單字節表示用charunicode使用wchar_t.我們是在單字節的光芒下成長起來的,一時間完全拋棄單字節未免難以接受,但是有些時候我們又不可避免的需要使用unicode字符集合,那么ms提供的解決辦法是泳宏:TChar

            我們看看他的定義:

            #ifdef UNICODE
            typedef wchar_t TCHAR;
            #else
            typedef char TCHAR;
            #endif

            ok,一切問題都解決了,我們只需要定義UNICODE就一樣使用wchar_t,是很方便。另外,在windowsCOM中使用的一律是unicode,但是MFC默認的確實MBCS,所以你用MFC寫的類庫如果放到了COM下,有些字符的格式化方式或者返回值錯誤的,原因就是com一律使用unicode,而unicode使用wchar_t('00')結尾,char卻是使用'0'結尾的。一般情況下,普通字符需要加載_T宏才能正常運行,比如MFC中你寫道S = "FSDFSDF",那么該類轉到COM下,需要寫S = _T("FSDFSDF");才可以。我們可以想象宏_TTCHAr的功能一樣,如果使用UNICODE就自動在constant string前面加上L,否則就直接使用。

            我們說一些小問題:

            VC6生成的console application
            int main(int argc, char* argv[])

            VS C++ 2005生成的是

            int _tmain(int argc, _TCHAR* argv[])

            顯然,用_tmain更好,why?

            You can also use _tmain, which is defined in TCHAR.h. _tmain will resolve to main unless _UNICODE is defined, in which case _tmain will resolve to wmain.(http://msdn2.microsoft.com/en-us/library/6wd819wh.aspx#).

            我們也會常常看到如下一些字符類型,

            WCHAR wchar_t wchar_t
            LPSTR zero-terminated string of char (char*) zero-terminated string of char (char*)
            LPCSTR constant zero-terminated string of char (const char*) constant zero-terminated string of char (const char*)
            LPWSTR zero-terminated Unicode string (wchar_t*) zero-terminated Unicode string (wchar_t*)
            LPCWSTR constant zero-terminated Unicode string (const wchar_t*) constant zero-terminated Unicode string (const wchar_t*)
            TCHAR char wchar_t
            LPTSTR zero-terminated string of TCHAR (TCHAR*) zero-terminated string of TCHAR (TCHAR*)
            LPCTSTR constant zero-terminated string of TCHAR (const TCHAR*) constant zero-terminated string of TCHAR (const TCHAR*)
            C
            一般代表constantP代表指針,LP代表長指針,W代表寬字符,也就是UNICODE,這下是不是都能明白這些是干什么的了?

            我們也會常常看到_mbsstr()這樣的函數,這就是MBCS字符編碼的函數,當然可以處理SBCS編碼,但是反之卻不行。所以為了保險起見,我們可以使用_mbsstr代替strstr,但是如果程序只是處理SBCS,那么顯然又影響效率,所以到底用什么方式同時滿足效率和可移植性,自己掂量著辦吧。

            以后使用C++編寫程序,如果出現亂碼,首先檢查C++的編碼類型,而且一般情況下都是結束符號沒有弄對,SBCSMBCS都是以單字節0結尾,UNICODE是以雙字節00結尾的。

             

            posted on 2008-11-07 22:33 肥仔 閱讀(727) 評論(0)  編輯 收藏 引用 所屬分類: 字符編碼

            久久九九青青国产精品| 亚洲国产美女精品久久久久∴| 久久99国产精品尤物| 国产成人精品免费久久久久| 久久99精品国产麻豆宅宅| 久久久久亚洲AV成人网人人软件| 久久久亚洲欧洲日产国码是AV| 国产精品久久久久久吹潮| 91久久香蕉国产熟女线看| 99久久国产亚洲综合精品| 久久久久久狠狠丁香| 久久精品国产亚洲AV香蕉| 91麻豆精品国产91久久久久久| 久久婷婷色综合一区二区| 色综合色天天久久婷婷基地| 国产精品久久久香蕉| 国产农村妇女毛片精品久久| 久久久久久精品免费免费自慰| 久久综合狠狠色综合伊人| 综合久久国产九一剧情麻豆| 久久亚洲国产成人精品无码区| 91视频国产91久久久| 亚洲αv久久久噜噜噜噜噜| 亚洲人成网站999久久久综合| 九九久久精品无码专区| 国产V综合V亚洲欧美久久| 欧美黑人激情性久久| 久久91这里精品国产2020| 伊人久久大香线蕉精品| 国内精品人妻无码久久久影院| 久久精品国产男包| 亚洲精品无码成人片久久| 一本久久a久久精品亚洲| 伊人情人综合成人久久网小说 | 亚洲国产成人久久精品动漫| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区| 亚洲精品美女久久777777| 久久激情亚洲精品无码?V| 久久国产成人午夜aⅴ影院| 成人免费网站久久久| 无码日韩人妻精品久久蜜桃|