int16 转为 uint8,有符号数通过串口传输

本文解释了有符号数如何通过补码转换为无符号数,以及在进行串口传输时如何正确拆分和重组int16_t以保持原始数值不变。
摘要由CSDN通过智能技术生成

有符号数转为无符号数,有符号数通过串口传输


由于有符号数在计算机中的存储方式为:
第一位是符号位。符号为1表示负数;0表示正数。即正数为原码,负数为补码。

无符号数都为原码。

在计算机中,负数以其正值的补码形式表达
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
反码:将二进制数按位取反(0变1,1变0),所得的新二进制数称为原二进制数的反码。
补码:反码加1称为补码。

int16_t inta = -10000; //0xD8F0
uint16_t uinta = 0;

inta = - 10000 二进制为D8F0(补码形式)

有符号数赋值给无符号数,会直接将二进制码赋值过去。

uinta = inta;
此时uinta = 0xD8F0;(原码形式)

转为十进制:inta=-10000,uinta=55536,

如果需要通过串口传输,将int16拆成两个uint8,再拼成16位赋值给int16,数据不会变。
TXBuf[0]=(inta>>8)&0xff;
TXBuf[1]=inta&0xff;
intb=((TXBuf[0]<<8)+TXBuf[1]);

此时intb仍等于inta。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值