多字节字符集的MFC工程中,怎么将十六进制的字符串转成解码后的中文字符串?

 我来答
intehel
2014-09-13 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1764万
展开全部

什么是16进制的字符串?

是这样的: CED2CAC7C9F1?

char buffer[] = "CED2CAC7C9F1";
int length = strlen(buffer);
ASSERT(length%4 == 0);    //如果全是中文,那么必定是4的倍数。
LPSTR pDecode = (LPSTR)malloc(length/2+1);
pDecode[length/2] = 0;
for(int i=length-4;i>=0;i-=4)
{
buffer[i+4] = 0;
int code;
sscanf(buffer+i,"%x",&code);
pDecode[i/2+1] = code & 0xFF;
pDecode[i/2] = (code>>8) & 0xFF;
}


pDecode就是解码后字符串了。

追问
太感谢了!
还有一个疑问,如果不确定全部是中文,可能有字母或者数字怎么办。
因为字母和数字就不一定是4的倍数了。
追答
#include <stdio.h>
#include <stdlib.h>
#include <wtypes.h>

void main(int argc, char* argv[])
{
char buffer[] = "CED2CAC731C9F1";
int length = strlen(buffer);
//ASSERT(length%2 == 0);
LPSTR pDecode = (LPSTR)malloc(length/2+1);
pDecode[length/2] = 0;
for(int i=0;i<length;i+=2)
{
int code;
sscanf(buffer+i,"%02X",&code);
pDecode[i/2] = code & 0xFF;
if(code > 0x7F)
{
i+=2;
sscanf(buffer+i,"%02X",&code);
pDecode[i/2] = code & 0xFF;
}
}

printf("%s\n",pDecode);
free(pDecode);
}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式