我以前总以为 char 代表有符号,而 unsigned char 代表无符号。现在才知道如果换做 short 或 int , 这样理解都没问题,因为c标准明确定义了。但是,唯独 char 不能这样理解,因为c标准中对此是 Impementation Defined,就是未明确定义,由具体的编译器明确定义。vc编译器、x86上的 gcc 都把 char 定义为 signed char
例子
x86编译器
char a = 0xe7;
printf("%d\n", a);
输出应该为
而arm经过终端调试结果输出为 231
因此为方便移植,后续数据结构带符号应该统一调整为 int8_t,int16_t