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

2023-01-09

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

10进制是为显示出来,方便阅读。收到的数据存储在数组RevData149[]中,共149个完全填充,并将部分数据提取出来,进行转化。
....... 0X00 0XE2 ....... 就对这样的两个16进制数进行转化

相似知识
C语言中求一堆数组中正数与负数的和,,帮我看看怎么改 #include<stdio.h>voidmain(void)inta[1000];inti,j,sum1=0,sum2=0;scanf("%d",&j);for(i=
STM32定时器四通道捕获求助 参考知识1#include"CAM.h"#defineTIMERTIM2voidinit_tim2_cam(u16psc,u16arr,u8way,u8dir)RCC->AP
stm的工作原理 STM为一般时分复用,即各信道的信号按时间间隔出现在线路上。SDH的基本速率是155.52Mb/s称为第1级同步传输模块,即STM-1,相当于SONET体系中OC-3的速率。步进电动机是将电脉冲激励信
C语言题目 结果为sum=32这是一个二维数组a[0][4]=1,2,3,4a[1][4]=5,6,7,8a[2][4]=9,10,11,12a[3][4]=13,14,15,16for进行了四次循环,每次循环加
没有烧录座怎么烧录stm32f103?  亲,我来帮你回答吧,你是想问没有烧录用的底座如何烧录stm32f103是吧,其实目前市面上有SmartPRO5000U-PLUS的烧录器支持STM32F10X系列的在线烧录,既可以裸片烧,
42步进电机怎么用stm32控制加减速 参考知识1像这种调试问题,解决方法:首先测量信号端口对地的电阻,判断是否短路;第二程序是否设置正确,仔细检查,是否有其他地方设置改IO口,第三,是否该IO的驱动能力不足,即电流输出能力,若不足,可以加
基于stm32的智能小车需要啥材料 参考知识11、主控制器,stm32最小系统;2、传感器系统,相应的滤波、AD/DA转换电路;3、电机驱动系统,驱动电路、电机、编码器(或测速机);4、供电系统,电池、稳压电路;5、机械传动系统,减速机
stm32单片机能写复杂控制算法么 1.PID原理1.1PID三个参数简单理解1.2PID1.3PIPDPID适用系统2.串级PID原理3.PID代码3.1单级PID3.1.1初始化PID结构体3.1.2单级PID计算3.1.3PID初