stm32单片机内。收到一串16进制数组,将其转化为10进制。为正数表现正常,为负数则显示65535等值。如何将其转化为负值?
例:00E2 - 226 这是正确转化 FFFF - 65535 错误转化,需要的是-1
转化语句:sprintf(chstr,"b3.txt=\"%4d\"",(RevData149[29]*256+RevData149[30])/10);
我需要的是-1,而不是65535
位操作,判断高八位的最高位是否为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;
参考知识1 问题描述不清晰。10进制是为显示出来,方便阅读。收到的数据存储在数组RevData149[]中,共149个完全填充,并将部分数据提取出来,进行转化。
....... 0X00 0XE2 ....... 就对这样的两个16进制数进行转化