[VS2005 C++] 十六进制转换成字符串 汉字乱码

wangweicmon236 2009-06-13 09:40:16
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;
}
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
用宽字符,先看是什么字节序啊。
ltc_mouse 2009-06-13
  • 打赏
  • 举报
回复
数组c_cn的类型应该用unsigned char吧,用char对汉字的低字节,似乎有可能得不到正确的值~

另外,查查看是不是高低字节顺序的问题?
wangweicmon236 2009-06-13
  • 打赏
  • 举报
回复
楼上的方法不见效,大家都怎么转换啊,帮帮忙啊,谢谢了
ltc_mouse 2009-06-13
  • 打赏
  • 举报
回复
result+=(char)value;
----------------------
是不是这里有问题? 用char怎么处理中文呢?是不是应该用wchar_t
wangweicmon236 2009-06-13
  • 打赏
  • 举报
回复
或者不用我这种思路,能够实现十六进制和字符串互相转换,并且汉字不乱码的都行,先谢谢大家了
wangweicmon236 2009-06-13
  • 打赏
  • 举报
回复
大家的意思是十六进制转字符的函数没有问题?问题出在字符转十六进制的时候转错了?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧