JAVA 16进制转10进制正负数问题

1.项目背景:通过WebSocket连接,设备传递UDP数据,对UDP数据进行解析,按bit位协议来做前端展示。(类似 AA BB CC DD 01 75 92 89 76 88 .. .. .. .. .. ..)

2.仅讲16进制转10进制变正负数的过程。

3.原理,将获取当前数据包位置的数据如 AA BB 整体转换成二进制数据,在判断最高位bit15的位置是否为0,0则为正数,1则为负数,我也不知道为什么,领导给我们讲的... 画图如下↓ ↓ ↓ ↓ ↓ ↓

细节:(具体我也不知道为什么这样规定,就当是个公式)

1)从1010 1010 1011 1011由右向左数,依次为bit0,bit1,bit2,...,bit15。规定是判断bit15为0则数据为负数,为1正常转十进制计算。

2)为负数时,有两个选择,可以整体转换十进制后前面加"-"号,也可以直接减去(FFFF = 65535)方便计算,

3)代码展示

                Long status;                

                String value = "BBFF";


                //截取最高位
                String bitHigh = value.substring(0, 1);
                //16进制转10进制
                int radix = Integer.parseInt(bitHigh, 16);
                //10进制转2进制
                String binaryString = Integer.toBinaryString(radix);
                //二进制不够补位
                if(binaryString.length() != 4){
                    for (int i = binaryString.length(); i<4; i++){
                        binaryString = "0" + binaryString;
                    }
                }
                //bit15 1负数 0正数 (负数直接小数减大数可以实现)
                if (binaryString.substring(0,1).equals("1")){
                    Long l = Long.valueOf(value, 16);
                    status = l - 65535;
                }else {
                    status = Long.valueOf(value, 16);
                }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值