Power_s.Ch1 = ( (uint8)(((*RequestData)[0]) << 8 ) | ((*RequestData)[1]) );
- &GT;它抛出以下错误:
如何解决这个问题?
答案 0 :(得分:0)
1.假设一个u8操作数,左移7bit以上需要一个比uint8更宽的整数,在你的情况下你要移8。
2.假设Power_s.Ch1为大于uint8的类型,则存在从unit8到更高整数类型的隐式转换。
请检查整数提升和算术转换规则。在移位的情况下,通常的一元转换分别应用于每个操作数,结果的类型是转换后的左操作数的类型。
答案 1 :(得分:0)
12.8表示移位的右操作数必须低于左操作数的基础类型中的位数。如果RequestData
的类型为uint8_t*
,那么静态分析器会告诉您将uint8_t向左移动8是不合理的。如果RequestData
属于某些情况其他类型,静态分析仪坏了。
10.1确实关注隐式整数类型的促销。以下列方式修复您的代码:
uint8_t u8_result = (uint8_t)((*RequestData)[0] << SMALL_ENOUGH);
Power_s.Ch1 = (uint8_t)(u8_result | (*RequestData)[1]); // assuming Power_s.Ch1 is uint8_t.
你几乎肯定要像上面那样在几行中打破这种表达,否则因为很多演员而无法理解。