比如:
“中”这个字符对应的ascii码是-10544
“国”这个字符对应的ascii码是-17926
问题:
现在已知ascii码是-14133,如何才能得到它对应中文字符是“人”字?
注意我这里的-14133是通过asp里面的asc函数得到的。
先说声谢谢!
51403 - (-14133) = 65536 = 0xFFFF + 1
你的ascii码值和偶算出来的值还素有点关系滴~~~~
所以~~
DWORD i = 65536 + (-14133);//人的ascii码值
CString str;
str.Format("%c%c", (BYTE)(i >> 8),(BYTE)(i & 0xFF));
AfxMessageBox(str);
输出:人
希望有点用~~
可以如下进行:
int i = -14133;
char a[3];
a[0] = (char)((i & 0xff00) >> 8);
a[1] = (char)(i & 0xff);
a[2] = 0;
printf("%s\n",a);
去down一个中国字对应asci的符号表来转换
或者用宽字符或者CString来解决
例如:
char szText[3]={0};
szText[0] = char(HIBYTE(-14133));
szText[1] = char(LOBYTE(-14133));
TRACE("%s",szText);
我试过了输出是"人"
short int ch=-10544;
CString str="";
str+=((unsigned char *)(&ch))[1];
str+=((unsigned char *)(&ch))[0];
short int ch=-10544;
char str[256]="";
str[0]=((unsigned char *)(&ch))[1];
str[1]=((unsigned char *)(&ch))[0];
str[2]=0;
或许还有一个反变换的函数,类似chr,当然自己计算也不复杂
void main()
{
// 中国人
// 10544 17926 14133
unsigned char buf[]="中国人";
short a,b=-17926;
a=256*buf[0] + buf[1] - 65536;
buf[4]=(b+65536)/256;
buf[5]=(b+65536)%256;
printf("%d:%s\n",a,buf+4);
}
这样一段代码也许能说明问题:
short a = -14133;
char * pa = (char *)&a;
char x[3];
memset(x, 0, 3);
x[0] = pa[1];
x[1] = pa[0];
printf("%s", x);
有这么麻烦吗?
比如人字:机器内码是 0xC8CB,用int型表示就是:-14133,
只需要明白这些,剩下的工作就很容易了。