我想知道为什么将一个字符串转换为无符号整数(uint16_t或更高)将所有位8-15设置为1.虽然两步转换将第8-15位保持为0.我做错了什么/很奇怪或者在将char转换为大于8位的整数时始终ps
的“安全”方式?例如。在下面的代码中,如果我执行此操作,& 0xFF
将获得正确的值:
b
代码:(我将额外的uint16_t b = (uint16_t) ((*readChar)[0] & 0xFF);
放在最后,以防第一个打印值的printf
愚弄我)
printf
答案 0 :(得分:1)
在您的系统上,char
的范围为-128到127.(这很常见)。它不能像你建议的那样保持185的值。您调用的值185实际上是256-185,即-71
。
将-71
转换为无符号16位定义为65536 - 71
65465
。 (负整数到无符号的所有转换都以这种方式工作)。
您可以使用(uint8_t)a
技术将-71
转换为185
;或者首先使用uint8_t
代替char
。