比如:
“中”这个字符对应的ascii码是-10544
“国”这个字符对应的ascii码是-17926
问题:
现在已知ascii码是-14133,如何才能得到它对应中文字符是“人”字?
注意我这里的-14133是通过asp里面的asc函数得到的。
先说声谢谢!
“中”这个字符对应的ascii码是-10544
“国”这个字符对应的ascii码是-17926
问题:
现在已知ascii码是-14133,如何才能得到它对应中文字符是“人”字?
注意我这里的-14133是通过asp里面的asc函数得到的。
先说声谢谢!
/* CString str="人";
WORD i ;
CString s;
i=((BYTE)str[0] << 8)+(BYTE)str[1];
s.Format("%d",i);
AfxMessageBox(s);
*/
输出:51403
/*
DWORD i = 51403;
CString str;
str.Format("%c%c", (BYTE)(i >> 8),(BYTE)(i & 0xFF));
AfxMessageBox(str);
*/
输出:人
我只是举个例子而已,可我事先并不知道-14133对应的就是一个“人”字,
你那是先用“人”字进行运算之后得到了51403,然后再反过去算。我在程
序中要对一些ascii码进行转化得到对应的中文字。呵呵,不管怎样,谢谢你的热心:)
lazygod(Use any item)
用char直接赋值不行的,我试过了,没这么简单。:)
所以~~ 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);
或者用宽字符或者CString来解决
例如:
char szText[3]={0};
szText[0] = char(HIBYTE(-14133));
szText[1] = char(LOBYTE(-14133));
TRACE("%s",szText);
我试过了输出是"人"
CString str="";
str+=((unsigned char *)(&ch))[1];
str+=((unsigned char *)(&ch))[0];
char str[256]="";
str[0]=((unsigned char *)(&ch))[1];
str[1]=((unsigned char *)(&ch))[0];
str[2]=0;
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,只需要明白这些,剩下的工作就很容易了。