位操作,判断高八位的最高位是否为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;
问题描述不清晰。
① 串口收到的数据当然是十六进制,然后你为什么想要把它转成十进制?为了显示输出?
② 收到的数据是几个字节?什么格式?如何解析?LE还是BE?