一个很小疑问,求解答
一个小小的疑问,求解答
这样一个简易测试程序,在VC6下运行:
得到下边这个运行结果,只是想问,为什么前边会显示6个 f 呢?
------解决方案--------------------
符号扩充呗. 0x9F 是一个负数, -97,
int 里面对应 -97 的数的十六进制就是 ffffff9f
------解决方案--------------------
那就给他屏蔽掉
------解决方案--------------------
说明对于你的编译器: char其实是signed char
这样一个简易测试程序,在VC6下运行:
#include <stdio.h>
int main(void)
{
char szTmp[5] = "\x9F\x36";
printf("%x %x\n",szTmp[0],szTmp[1]);
return 0;
}
得到下边这个运行结果,只是想问,为什么前边会显示6个 f 呢?
十六进制
------解决方案--------------------
符号扩充呗. 0x9F 是一个负数, -97,
int 里面对应 -97 的数的十六进制就是 ffffff9f
------解决方案--------------------
那就给他屏蔽掉
printf("%x %x\n",szTmp[0]&0xff,szTmp[1]&0xff);
------解决方案--------------------
#include <stdio.h>
int main(void)
{
char szTmp[5] = "\x9F\x36";
printf("%x %x\n",szTmp[0],szTmp[1]);
printf("%x %x\n",(unsigned char)szTmp[0],szTmp[1]);
return 0;
}
//ffffff9f 36
//9f 36
说明对于你的编译器: char其实是signed char