求助:单片机通过串口向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,这如何解决? 展开
 我来答
做而论道
高能答主

推荐于2016-01-21 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部
16位的有符号数据赋值给一个32位字长的有符号类型的变量,
16位的-1在32位字长的有符号int数据里表示65535,这如何解决?
----
在32位字长的数据里,进行判断:
如果,这个32位数,大于 32767,它就是负数。
如:32768~65535,就都是负数。

再用 -65536,加上这个数(32768~65535),
即可得出,这个数,所代表的正确数字:-32768 ~ -1。
追问
非常感谢,我是这样解决的。先左移16位,再右移16位。
追答
先左移16位,再右移16位。
--

右移16次时,最高位不变,就可以了。
这样做,是不是会慢一些?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lucker8201
2014-07-23 · TA获得超过133个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:106万
展开全部
做个标志,确认是单片机里传来的数据,再处理转换成32位数
追问
谢谢,我就是不会处理转换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wybliw
2014-07-23
知道答主
回答量:27
采纳率:0%
帮助的人:14.6万
展开全部
PC程序里判断传入数据是否大于32767,然后做相应加减添加符号,
追问
非常感谢,我是这样解决的。先左移16位,再右移16位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式