UNICODE工程中,由十六进制的unicode字符内码转换成unicode字符
UNICODE工程中,由十六進制的unicode字符內碼轉換成unicode字符(雙字節)
這段程序片段是根據“一種字符串轉化為16進制顯示的算法”(http://www.cppblog.com/qinqing1984/archive/2009/06/27/88636.html)作者提供的方法,自己反推出的,感謝qinqing1984博客
CString HexToString(CString strHex)
{
?CString??strRst;
?if (strHex.GetLength() >= 2 && strHex.Left(2) == _T("0x"))
??strHex = strHex.Mid(2);
?if (strHex.IsEmpty())
??return strRst;
?if (strHex.GetLength() % 4 != 0)
??return strRst;
?int???nLen = strHex.GetLength();
?wchar_t??*pstr = new wchar_t[nLen + 1];
?memset(pstr, 0, nLen + 1);
?_tcscpy(pstr, strHex);
?wchar_t*?pstrT = pstr;
?for (int i = 0; i < nLen; i = i + 4)
?{
??//
??char???ch1 = (char)(*pstr++);
??unsigned char?uc1;
??if (ch1 >= '0' && ch1 <= '9')
???uc1 = ch1 - '0' + 0;
??else
???uc1 = ch1 - 'A' + 10;
??uc1 = uc1 << 4;
??//
??char???ch2 = (char)(*pstr++);
??unsigned char?uc2;
??if (ch2 >= '0' && ch2 <= '9')
???uc2 = ch2 - '0' + 0;
??else
???uc2 = ch2 - 'A' + 10;
??uc2 = uc2 & 0x0F;
??char???ch12 = uc1 | uc2;
??//
??char???ch3 = (char)(*pstr++);
??unsigned char?uc3;
??if (ch3 >= '0' && ch3 <= '9')
???uc3 = ch3 - '0' + 0;
??else
???uc3 = ch3 - 'A' + 10;
??uc3 = uc3 << 4;
??//
??char???ch4 = (char)(*pstr++);
??unsigned char?uc4;
??if (ch4 >= '0' && ch4 <= '9')
???uc4 = ch4 - '0' + 0;
??else
???uc4 = ch4 - 'A' + 10;
??uc4 = uc4 & 0x0F;
??char???ch34 = uc3 | uc4;
??wchar_t???wch12 = (wchar_t)ch12;
??wchar_t???wch34 = (wchar_t)ch34;
??wch12 = wch12 << 8;
??wchar_t???wch = wch12 | wch34;
??strRst += wch;
?}
?delete []pstrT;
?return strRst;
}
總結
以上是生活随笔為你收集整理的UNICODE工程中,由十六进制的unicode字符内码转换成unicode字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫+数据库+大数据分析
- 下一篇: sdcms栏目图片的调用方法