将char转换为uint会设置所有MSB

时间:2018-01-14 21:58:40

标签: c casting char int

我想知道为什么将一个字符串转换为无符号整数(uint16_t或更高)将所有位8-15设置为1.虽然两步转换将第8-15位保持为0.我做错了什么/很奇怪或者在将char转换为大于8位的整数时始终ps的“安全”方式?例如。在下面的代码中,如果我执行此操作,& 0xFF将获得正确的值:

b

代码:(我将额外的uint16_t b = (uint16_t) ((*readChar)[0] & 0xFF); 放在最后,以防第一个打印值的printf愚弄我)

printf

1 个答案:

答案 0 :(得分:1)

在您的系统上,char的范围为-128到127.(这很常见)。它不能像你建议的那样保持185的值。您调用的值185实际上是256-185,即-71

-71转换为无符号16位定义为65536 - 71 65465。 (负整数到无符号的所有转换都以这种方式工作)。

您可以使用(uint8_t)a技术将-71转换为185;或者首先使用uint8_t代替char