安卓io流 接收16进制字节 出现负值

在这里插入图片描述

安卓开发中 接收电脑发来的16进制数据出现负值 记录一下

如图 接收030407e20001020000de8d ,接受到的字节数组为

[3, 4, 7, -30, 0, 1, 2, 0, 0, -34, -115]

很显然 出现负值
。对我只管印象就不对的 正常的acii码来说
03 3
04 4
07 7
e2 -30
.
.
下边的就不一一举例

我们知道e2的acii码就是226啊 不是-30啊

我们转换一下二进制 来进一步解释

16进制二进制
e2‭11100010‬

明显就是 226 啊 怎么-30 出现负数我们肯定可以想到的就是反码补码知识
原码表示 1110 0010 就是 2^7 + 2 ^ 6 +2 ^5 +2 ^1 =128 +64+32+2=226
但是机器的运算由于原码和反码的计算不方便 运用补码计算
补码表示 1110 0010 补码第一位是符号位 其余是原码取反在加1
1110 0010 我们反计算原码

符号位
11100010

1代表负数相当于 -110 0010
110 0010 -1= 110 0001 110 0001是反码
110 0001在取反求出原码 001 1110 转化为16进制16+ 8+4+2=30
取符号 -30
所以问题就是编码问题
详细介绍原码补码参考这一篇。
https://blog.csdn.net/qq_31469369/article/details/103399831

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值