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;
}