为了账号安全,请及时绑定邮箱和手机立即绑定

从 Java 中的字节数组创建一个 48 位有符号值

从 Java 中的字节数组创建一个 48 位有符号值

繁星coding 2023-01-05 17:11:21

我正在尝试从字节数组中提取 6 个字节并将它们转换为 48 位有符号整数值(即 Java 长整数)。如何做到这一点?

编辑:例如,如果字节数组具有以下之一:

byte[] minInt48 = new byte[] { (byte)0x80, 0, 0, 0, 0, 0 };
byte[] maxInt48 = new byte[] { (byte)0x7F, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF };

如何将其解析为 Java 原语(即 Java long)以保留符号值?


查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1579条经验 获得超11个赞

首先,您需要了解符号扩展。您需要将每个字节视为无符号值。


      long v = 0;

      byte q = -2; // unsigned value of 254

      v = v + q;

      System.out.println(v); // prints -2 which is not what you want.

      v = 0;

      v = v + (q & 0xFF); // mask off sign extension from q.

      System.out.println(v); // prints 254 which is correct.

这是一种方法。


     long val = 0;

     byte[] bytes = { -1, 12, 99, -121, -3, 123

     };

     for (int i = 0; i < bytes.length; i++) {

        // shift the val left by 8 bits first.

        // then add b.  You need to mask it with 0xFF to

        // eliminate sign extension to a long which will

        // result in an incorrect conversion.

        val = (val << 8) | ((i == 0 ? bytes[i]

              : bytes[i] & 0xFF));

     }

     System.out.println(val);


查看完整回答
反对 回复 2023-01-05

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信