网络编程中一般都用unsigned char,而不用char,是因为把char强制转换成int或long时,系统会进行类型扩展。
#include <stdio.h>
int main()
{
int a = 0xde; //1101 1110
char b = a;
unsigned char u_b = a;
printf("b=%x\n",b);
printf("u_b=%x\n",u_b);
char d = 0xde;
unsigned char c = 0xde;
int i_d = d;
int ui_d = c;
printf("i_d=%x\n",i_d);
printf("ui_d=%x\n",ui_d);
return 0;
}
运行:b=ffffffde
u_b=de
i_d=ffffffde [扩展之后]
ui_d=de
字节0xde最高位是1,如果是char类型,在转换成int时,高位全部会扩展成为1;而unsigned char则会全部扩展成0。
#include <stdio.h>
int main()
{
int a = 0x2b; //1101 1110
char b = a;
unsigned char u_b = a;
printf("b=%x\n",b);
printf("u_b=%x\n",u_b);
char d = 0x2b;
unsigned char c = 0x2b;
int i_d = d;
int ui_d = c;
printf("i_d=%x\n",i_d);
printf("ui_d=%x\n",ui_d);
return 0;
}
当字节为0x2b时,因为其二进制最高位是0,所以unsigned char和char的高位都扩展成0,结果一样。
参考地址:https://www.cnblogs.com/etangyushan/p/6871701.html?utm_source=itdadao&utm_medium=referral