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 UnicodeToUTF_8(char* pOut,wchar_t* pText){
// 注意 WCHAR高低字的顺序,低字节在前,高字节在后
char* pchar = (char *)pText;
pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6);
pOut[2] = (0x80 | (pchar[0] & 0x3F));
}
出处:
http://www.360doc.com/content/13/0114/20/7023119_260175036.shtml
以上代码只能转换第一个宽字符,要转换全部可以加一个循环,如下:
string UnicodeToUTF_8(wchar_t* pText)
{
// 注意 WCHAR高低字的顺序,低字节在前,高字节在后
string str;
char* pOut = new char[4];
memset(pOut, 0, 4);
for (int i = 0; i < wcslen(pText); i ++) {
char* pchar = (char *)&pText[i];
pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4));
pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) +((pchar[0] & 0xC0) >> 6);
pOut[2] = (0x80 | (pchar[0] & 0x3F));
str += pOut;
}
return str;
}
还可以使用 iconv库。