(stm32)C语言收到16进制负数怎么表现

2025-05-09 00:42:19
推荐回答(2个)
回答(1):


位操作,判断高八位的最高位是否为1,为1的话,就是负的,强制转换后减去0xFFFF的值,即65536。例如你想得到-1,那么强制转换之后是65535,减去65536即为-1了。注意,存储最后结果数值的变量类型需要为int。

下面是我一个代码里面的应用。CAN通信读取直流无刷减速电机的转速。

if((Receive_Group[2]>>7) != 0x01)

Speed_Of_Revolution = (u16)((Receive_Group[2] << 8) | Receive_Group[3] );

else

Speed_Of_Revolution = ((u16)((Receive_Group[2] << 8) | Receive_Group[3] )) - 65536;

回答(2):

问题描述不清晰。
① 串口收到的数据当然是十六进制,然后你为什么想要把它转成十进制?为了显示输出?
② 收到的数据是几个字节?什么格式?如何解析?LE还是BE?