gpt4 book ai didi

java - 在 Java 中从字节数组创建 48 位有符号值

转载 作者:行者123 更新时间:2023-12-02 04:45:48 25 4
gpt4 key购买 nike

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

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

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)以便保留符号值?

最佳答案

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

      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);

关于java - 在 Java 中从字节数组创建 48 位有符号值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com