• <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
            <2008年2月>
            272829303112
            3456789
            10111213141516
            17181920212223
            2425262728291
            2345678

            常用鏈接

            留言簿(34)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊

            收藏夾

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            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高低字的順序,低字節(jié)在前,高字節(jié)在后
            /*
            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)
            {
            //如果是英文直接復(fù)制就可以
            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';

            //返回結(jié)果
            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 聶文龍 閱讀(629) 評(píng)論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品国产亚洲AV无码娇色 | 国产精品无码久久综合网| 91精品国产91久久综合| 久久综合狠狠综合久久激情 | 99久久精品久久久久久清纯| 亚洲欧美成人久久综合中文网| 日韩久久久久久中文人妻| 国产精品一区二区久久精品无码| 久久99九九国产免费看小说| 久久夜色精品国产亚洲| 久久久久久久久波多野高潮| 一本一道久久精品综合| 久久丫精品国产亚洲av| 无码任你躁久久久久久| 久久电影网一区| 久久精品国产亚洲av影院| 久久精品国产欧美日韩99热| 久久精品国产91久久综合麻豆自制 | 久久国产精品无码HDAV| 伊人久久大香线蕉成人| 精品久久久久久无码免费| 久久精品欧美日韩精品| 国产美女亚洲精品久久久综合| 欧美午夜A∨大片久久| 国产激情久久久久影院小草| 99久久中文字幕| 久久精品人人做人人爽97 | 午夜久久久久久禁播电影| 人人狠狠综合久久亚洲| 精品无码久久久久久国产| 香港aa三级久久三级| 久久国产精品久久久| 久久精品国产亚洲AV电影| 久久精品国产亚洲av水果派| 人妻精品久久久久中文字幕69| 国产毛片欧美毛片久久久| 7777精品伊人久久久大香线蕉| 日韩影院久久| 国产成人精品久久| 久久综合九色综合网站| 国产精品久久久久久搜索|