C语言char型变量0xFF

char和uint8_t

gcc version 5.4 出现以下问题

1
2
3
4
5
//此处对比失败
if(buf[12] == 0xF0 && buf[13] == 0xF0)

//此处对比成功
if((uint8_t)buf[12] == 0xF0 && (uint8_t)buf[13] == 0xF0)

在编写udp程序解析数据的时候,发现接收的char型变量为0xFF,但是使用printf后打印为0xFFFFFFFF,
调试程序查找原因后发现使用char时,对于printf来说其值为0xFFFFFFFF。
原因是%x要求的是无符号整形变量,你传入的是char型,这里有一个整数提升的问题。
char作为有符号数,提升到无符号整数,由于char的值为0xFF,那么提升时,前面的填充位为1。
所以提升后其值为0xFFFFFFFF

解决办法:

把char类型强制转换为uint8_t,使用uint8_t时,是无符号提升,前面的填充为0,所以提升后的值为0xFF


C语言char型变量0xFF
https://dnsnat.gitee.io/DEVELOP/C语言char型变量0xFF.html
作者
dnsnat
发布于
2022年3月22日
许可协议