[VS2005 C++] 十六进制转换成字符串 汉字乱码
CString result;
for(int i=0; i<hex.GetLength(); i+= 4)
{
long h4 = ((long)hex.GetAt(i)>=(long) 'A' ? ((long)hex.GetAt(i) -(long) 'A' + 10) : ((longhex.GetAt(i) -(long) '0'));
long h3 = ((long)hex.GetAt(i+1)>=(long) 'A' ? ((long)hex.GetAt(i+1) -(long) 'A' + 10) : ((long)hex.GetAt(i+1) -(long) '0'));
long h2 = ((long)hex.GetAt(i+2)>=(long) 'A' ? ((long)hex.GetAt(i+2) -(long) 'A' + 10) : ((long)hex.GetAt(i+2) -(long) '0'));
long h1 = ((long)hex.GetAt(i+3)>=(long) 'A' ? ((long)hex.GetAt(i+3) -(long) 'A' + 10) : ((long)hex.GetAt(i+3) -(long) '0'));
long value=h4*16*16*16+h3*16*16+h2*16+h1;
result+=(char)value;
}
return result;
hex是十六进制编码,要将hex转换成原字符串result,50B2转换成“傲”,6E38转换成“游”,英文字符都没有问题,转换汉字的时候出现了乱码。跟编码函数有关吗?以下是编码函数,从字符串到十六进制:
CString ConvertCStringoHex(CString Data)
{
CString sResult=L"";
for(int nLoop=0;nLoop<Data.GetLength();nLoop++)
{
wchar_t ch=Data.GetAt(nLoop);
char c_cn[2]={'0'};
c_cn[0]=ch>>8;
c_cn[1]=(char)ch;
static const char *hex="0123456789ABCDEF";
for(int i=0;i<2;i++)
{
unsigned char chHexA = hex[((unsigned char)(c_cn[i]) >> 4) & 0x0f];
unsigned char chHexB = hex[(unsigned char)(c_cn[i]) & 0x0f];
sResult += (char)chHexA;
sResult += (char)chHexB;
}
}
return sResult;
}