求助:单片机通过串口向PC传送双字节有符号数据的问题
avr单片机的int数据类型是两字节的,当通过串口向PC传送负数据时,比如-1,低8位数据就是11111111,高8位数据也是11111111,表示16位有符号数据-1,...
avr单片机的int数据类型是两字节的,当通过串口向PC传送负数据时,比如-1,低8位数据就是11111111,高8位数据也是11111111,表示16位有符号数据 -1,首先传低8位数据,然后传高8位数据,PC接收到以后在程序里需要把这个16位的有符号数据赋值给一个32位字长的有符号类型的变量,这时就会出现问题,16位的-1在32位字长的有符号int数据里表示65535,这如何解决?
展开
展开全部
16位的有符号数据赋值给一个32位字长的有符号类型的变量,
16位的-1在32位字长的有符号int数据里表示65535,这如何解决?
----
在32位字长的数据里,进行判断:
如果,这个32位数,大于 32767,它就是负数。
如:32768~65535,就都是负数。
再用 -65536,加上这个数(32768~65535),
即可得出,这个数,所代表的正确数字:-32768 ~ -1。
16位的-1在32位字长的有符号int数据里表示65535,这如何解决?
----
在32位字长的数据里,进行判断:
如果,这个32位数,大于 32767,它就是负数。
如:32768~65535,就都是负数。
再用 -65536,加上这个数(32768~65535),
即可得出,这个数,所代表的正确数字:-32768 ~ -1。
追问
非常感谢,我是这样解决的。先左移16位,再右移16位。
追答
先左移16位,再右移16位。
--
右移16次时,最高位不变,就可以了。
这样做,是不是会慢一些?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做个标志,确认是单片机里传来的数据,再处理转换成32位数
追问
谢谢,我就是不会处理转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PC程序里判断传入数据是否大于32767,然后做相应加减添加符号,
追问
非常感谢,我是这样解决的。先左移16位,再右移16位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询