电竞比分网-中国电竞赛事及体育赛事平台

分享

【C++】實(shí)現(xiàn)UTF_8編碼字符串轉(zhuǎn)換成GB2312編碼char類型字符串的代碼

 被抓不住 2013-01-15
網(wǎng)絡(luò)上不少代碼都不是獨(dú)立的C++代碼。
要不然就是參數(shù)帶了非標(biāo)準(zhǔn)C++類型的變量,
要不然干脆是其他地方自定義的類型做參數(shù)卻部分拷貝出來當(dāng)做開源代碼。
 經(jīng)過搜索再進(jìn)行改編,下面的C++代碼可以在任何C++編譯器中直接編譯通過,
可以直接拷貝使用,無痛無病,一了百了,伸手可用。
 

//////////////////////////////////////////////////////////////////////////
void UTF_8ToUnicode(wchar_t* 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); 

//////////////////////////////////////////////////////////////////////////
void  UnicodeToGB2312(char* pOut,wchar_t uData)

 WideCharToMultiByte(CP_ACP, NULL, &uData, 1, pOut, sizeof(wchar_t), NULL, NULL);
}       

//////////////////////////////////////////////////////////////////////////
std::string UTF_8ToGB2312(char *pText, int nLen)

 char * newBuf = new char[nLen+1]; 
 char Ctemp[4]; 
 memset(Ctemp,0,4); 
 int i = 0; 
 int j = 0;
 while(i < nLen)
 { 
  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;    
  } 
 }
 if (j <= nLen)
  newBuf[j] = 0;
 std::string strOut = newBuf;
 delete []newBuf;
 return strOut;
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多