多字节字符集的MFC工程中,怎么将十六进制的字符串转成解码后的中文字符串?
1个回答
展开全部
什么是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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询