我正在使用Eclipse进行STM32,我发现有很多与数字类型相关的错误。我定义了一个具有正确返回类型的函数,但是在调用它时仍然会出错。
uint8_t HEX_Parse(char c)
//this one is ok
uint16_t sum =(uint16_t)(HEX_Parse(Buffer[strlen(Buffer)-3])*16);
//this one get an error
sum += (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2]);
为什么呢?我该如何解决?
答案 0 :(得分:1)
后一项任务与:
相同sum = sum + (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2]);
表达式sum + (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2])
实际上具有类型int
,因为整数提升。
由于没有演员表可以进行显式转换,因此当int
表达式uint16_t
分配给{{int
时,编译器会警告从sum + (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2])
隐式转换回sum
1}}。
你应该投射到整个表达式:
sum = ( uint16_t )( sum + HEX_Parse(Buffer[strlen(Buffer)-2]) );