• <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)  編輯 收藏 引用
            久久久国产精品亚洲一区| 国产女人aaa级久久久级| 无码人妻少妇久久中文字幕蜜桃| 精品一二三区久久aaa片| 久久99精品久久久久久hb无码| 国产综合免费精品久久久| 亚洲女久久久噜噜噜熟女| 国产精品成人精品久久久| 日韩久久久久久中文人妻| 久久久这里有精品中文字幕| 久久ZYZ资源站无码中文动漫 | 99久久精品免费观看国产| 中文国产成人精品久久亚洲精品AⅤ无码精品| 久久99久久99精品免视看动漫| 国产福利电影一区二区三区,免费久久久久久久精 | 国产精品亚洲综合专区片高清久久久| 奇米影视7777久久精品人人爽| 成人免费网站久久久| 久久午夜羞羞影院免费观看| 噜噜噜色噜噜噜久久| 日本欧美国产精品第一页久久| 欧美精品一区二区精品久久| 久久精品人人做人人爽电影蜜月| 久久亚洲日韩看片无码| 久久人人爽人人人人片av| 久久久这里有精品| 国产精品美女久久福利网站| 久久久WWW成人免费毛片| 国产999精品久久久久久| 大香网伊人久久综合网2020| 香蕉久久一区二区不卡无毒影院 | 日韩AV毛片精品久久久| 久久艹国产| 久久毛片免费看一区二区三区| 国产福利电影一区二区三区,免费久久久久久久精 | 国内精品久久久久久99蜜桃 | 无码任你躁久久久久久久| 亚洲综合久久夜AV | 97精品依人久久久大香线蕉97| 久久人人爽人人爽人人片AV高清| 国产精品久久久久久久久久影院 |