• <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>
            隨筆 - 298  文章 - 377  trackbacks - 0
            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            void CChineseCodeLib::UTF_8ToUnicode(WCHAR* pOut,char *pText)
            {
            char* uchar = (char *)pOut;

            uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F);
            uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F);

            return;
            }

            void CChineseCodeLib::UnicodeToGB2312(char* pOut,unsigned short uData)
            {
            WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(WCHAR),NULL,NULL);
            return;
            }

            void CChineseCodeLib::Gb2312ToUnicode(WCHAR* pOut,char *gbBuffer)
            {
            ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1);
            return;
            }

            void CChineseCodeLib::UnicodeToUTF_8(char* pOut,WCHAR* pText)
            {
            // 注意 WCHAR高低字的順序,低字節在前,高字節在后
            /*
            char* pchar = (char *)pText;

            pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
            pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[1] & 0xC0) >> 6);
            pOut[2] = (0x80 | (pchar[0] & 0x3F));
            */


            int i=0;
            #define putchar(a) pOut[i++]=(BYTE)a;

            WCHAR c=pText[0];
            if (c < 0x80)
            {
            putchar (c);
            }
            else if (c < 0x800)
            {
            putchar (0xC0 | c>>6);
            putchar (0x80 | c & 0x3F);
            }
            else if (c < 0x10000)
            {
            putchar (0xE0 | c>>12);
            putchar (0x80 | c>>6 & 0x3F);
            putchar (0x80 | c & 0x3F);
            }
            else if (c < 0x200000)
            {
            putchar (0xF0 | c>>18);
            putchar (0x80 | c>>12 & 0x3F);
            putchar (0x80 | c>>6 & 0x3F);
            putchar (0x80 | c & 0x3F);
            }

            return;
            }

            void CChineseCodeLib::GB2312ToUTF_8(CString& pOut,char *pText, int pLen)
            {
            if( pLen==0 )
            {
            return;
            }
            char buf[4];
            char* rst = new char[pLen*6];

            memset(buf,0,4);
            memset(rst,0,pLen*6);

            int i = 0;
            int j = 0;
            while(i < pLen)
            {
            //如果是英文直接復制就可以
            if( *(pText + i) >= 0)
            {
            rst[j++] = pText[i++];
            }
            else
            {
            WCHAR pbuffer;
            Gb2312ToUnicode(&pbuffer,pText+i);

            UnicodeToUTF_8(buf,&pbuffer);

            unsigned short int tmp = 0;
            tmp = rst[j] = buf[0];
            tmp = rst[j+1] = buf[1];
            tmp = rst[j+2] = buf[2];


            j += 3;
            i += 2;
            }
            }
            rst[j] = '\0';

            //返回結果
            pOut = rst;
            delete[] rst;

            return;
            }

            void CChineseCodeLib::UTF_8ToGB2312(CString &pOut, char *pText, int pLen)
            {
            char * newBuf = new char[pLen+1];
            char Ctemp[4];
            memset(Ctemp,0,4);

            int i =0;
            int j = 0;

            while(i < pLen)
            {
            if(pText[i] > 0)
            {
            newBuf[j++] = pText[i++];
            }
            else
            {
            WCHAR Wtemp;
            UTF_8ToUnicode(&Wtemp,pText + i);

            UnicodeToGB2312(Ctemp,Wtemp);

            newBuf[j] = Ctemp[0];
            newBuf[j + 1] = Ctemp[1];

            i += 3;
            j += 2;
            }
            }
            newBuf[j] = '\0';

            pOut = newBuf;
            delete []newBuf;

            return;
            }
            posted on 2012-06-20 17:30 聶文龍 閱讀(635) 評論(0)  編輯 收藏 引用
            久久精品免费大片国产大片| 亚洲国产精品无码久久一区二区| 看久久久久久a级毛片| 中文字幕精品无码久久久久久3D日动漫 | 久久天堂电影网| 97精品伊人久久久大香线蕉| 久久高清一级毛片| 亚洲日本va中文字幕久久| 久久99久久99小草精品免视看| 国产精品久久久久一区二区三区| 久久精品成人一区二区三区| 亚洲国产精品无码久久久蜜芽| 色综合久久88色综合天天| 亚洲欧美一级久久精品| 久久这里只有精品久久| 国产精品久久久久久五月尺| 久久久久中文字幕| 久久永久免费人妻精品下载| 久久精品无码av| 四虎国产精品免费久久5151| 99蜜桃臀久久久欧美精品网站| 久久国产免费| 国产一区二区精品久久凹凸| 国内精品久久久久影院优| 伊人久久大香线蕉av不变影院| 久久人妻少妇嫩草AV蜜桃| 国产欧美久久一区二区| 亚洲精品无码久久久久sm| 日本精品久久久久影院日本| 国产呻吟久久久久久久92| 国产成人精品久久二区二区| 99久久无色码中文字幕人妻| 偷偷做久久久久网站| 香蕉aa三级久久毛片| 久久久久一级精品亚洲国产成人综合AV区| 狠狠色丁香久久综合婷婷| jizzjizz国产精品久久| 精品熟女少妇av免费久久| 久久久久久亚洲Av无码精品专口 | 日本国产精品久久| 亚洲日本久久久午夜精品|