• <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
            <2007年8月>
            2930311234
            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 聶文龍 閱讀(633) 評論(0)  編輯 收藏 引用
            欧美久久综合九色综合| 久久精品成人| 99久久精品毛片免费播放| 国产精品久久国产精麻豆99网站| www久久久天天com| 久久亚洲天堂| 99久久er这里只有精品18| 曰曰摸天天摸人人看久久久| 香蕉久久影院| 韩国三级大全久久网站| 久久综合色老色| 97久久天天综合色天天综合色hd| 久久久噜噜噜久久中文字幕色伊伊| 久久热这里只有精品在线观看| 久久精品人人槡人妻人人玩AV | 91精品国产91久久| 精品国际久久久久999波多野| 久久精品国产亚洲综合色| 2019久久久高清456| 精品久久久久久99人妻| 7777精品久久久大香线蕉| 国产香蕉97碰碰久久人人| 国产精品99久久久精品无码| 老司机国内精品久久久久| 99蜜桃臀久久久欧美精品网站| 国产亚洲美女精品久久久| 久久久久亚洲AV无码麻豆| 久久久久亚洲精品日久生情 | 久久亚洲sm情趣捆绑调教| 久久99久久99小草精品免视看 | 激情伊人五月天久久综合| 亚洲欧洲久久久精品| 久久国产精品波多野结衣AV| 国产情侣久久久久aⅴ免费| 久久婷婷五月综合成人D啪| 久久精品中文字幕大胸| 久久久久无码精品国产app| 精品无码人妻久久久久久| 久久精品九九亚洲精品天堂| 东京热TOKYO综合久久精品| 久久久一本精品99久久精品88|