我得到一个Eclipse错误:转换为';uint16';从';int';可能会改变它的价值

我得到一个Eclipse错误:转换为';uint16';从';int';可能会改变它的价值,c,C,我正在使用Eclipse for 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(Bu

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

为什么??如何修复它?

后一项任务与以下任务相同:

sum = sum + (uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2]);
表达式
sum+(uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2])
,由于整数提升,实际上具有类型
int
。 由于没有强制转换来进行显式转换,当
int
表达式
sum+(uint16_t)HEX_Parse(Buffer[strlen(Buffer)-2])
被分配到
sum
时,编译器警告从
int
返回到
uint16_t
的隐式转换

您应该对整个表达式进行转换:

sum = ( uint16_t )( sum + HEX_Parse(Buffer[strlen(Buffer)-2]) );

警告是正确的;转换可能会更改该值。类型为
uint16\u t
(通常相当于
无符号short
)的表达式在执行任何算术之前升级为
int
。因此,求和运算在
int
类型中完成,然后转换为
uint16\u t
。直接赋值将
uint8\u t
转换为
uint16\u t
,这是一种无损转换,因此不会引发警告(也不应该)。嘿,谢谢,我用你的方法解决了这个问题,我认为eclipse在语法上太严格了,因为我在工作时从其他IDE复制了这些句子。