網絡上不少代碼都不是獨立的C++代碼。 要不然就是參數(shù)帶了非標準C++類型的變量,
要不然干脆是其他地方自定義的類型做參數(shù)卻部分拷貝出來當做開源代碼。
經過搜索再進行改編,下面的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; }
|