我收到一个Eclipse错误:从'int'转换为'uint16_t'可能会改变它的值

时间:2016-07-16 05:57:29

标签: c

我正在使用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]);

为什么呢?我该如何解决?

1 个答案:

答案 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]) );