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栏目图片的调用方法
