分享

【C++】实现UTF_8编码字符串转换成GB2312编码char类型字符串的代码

 被抓不住 2013-01-15
网络上不少代码都不是独立的C++代码。
要不然就是参数带了非标准C++类型的变量,
要不然干脆是其他地方自定义的类型做参数却部分拷贝出来当做开源代码。
 经过搜索再进行改编,下面的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;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多