• <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
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(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 聶文龍 閱讀(634) 評論(0)  編輯 收藏 引用
            99久久精品免费看国产一区二区三区| 久久综合久久自在自线精品自 | 久久无码人妻一区二区三区午夜| 亚洲日本va中文字幕久久| 久久人人青草97香蕉| 日韩久久久久久中文人妻| 狠狠色丁香久久综合婷婷| 亚洲人成网站999久久久综合| 久久婷婷国产剧情内射白浆| 久久91精品国产91久久小草| 四虎久久影院| 久久夜色tv网站| 超级碰碰碰碰97久久久久| 99久久精品久久久久久清纯| 亚洲中文字幕无码久久2020| 久久久精品久久久久特色影视| 无码日韩人妻精品久久蜜桃| 日韩亚洲国产综合久久久| 久久午夜电影网| 国产亚洲欧美精品久久久| 久久久久99这里有精品10| 久久久久亚洲AV成人网人人网站 | 色综合久久久久久久久五月| 久久人人爽人人精品视频| 久久中文字幕一区二区| 久久AV高清无码| .精品久久久麻豆国产精品 | 久久综合亚洲色HEZYO国产| 日本免费久久久久久久网站| 国内精品久久久久伊人av| 精产国品久久一二三产区区别 | 久久国产劲爆AV内射—百度| 久久这里有精品视频| 久久久久女教师免费一区| 久久91精品综合国产首页| 久久www免费人成精品香蕉| 国产精品久久久久乳精品爆 | 91精品国产综合久久香蕉| 93精91精品国产综合久久香蕉| 国内精品伊人久久久久| 99久久www免费人成精品|