Java uint32(存储为long)到4字节数组

use*_*053 4 java byte uint32

我正在写入具有 uint32 的存储格式,最大允许值为“4294967295”。

当然,Java 中的整数仅不到“2147483647”的一半。所以在内部,我必须使用 Long 或 Guava 的 UnsignedInteger。

要写入这种格式,字节数组长度需要为 4,这正好适合 Integer,但将 Long 转换为字节数组需要长度为 8 的数组。

如何将表示最大值“4294967295”的 Long 或 UnsignedInteger 转换为 4 字节数组?

cod*_*dev 5

只需将其转换为 8 字节数组,然后仅获取最后 4 个字节:

 public static byte[] fromUnsignedInt(long value)
 {
     byte[] bytes = new byte[8];
     ByteBuffer.wrap(bytes).putLong(value);

     return Arrays.copyOfRange(bytes, 4, 8);
 }
Run Code Online (Sandbox Code Playgroud)

要扭转这种情况,您可以使用以下方法:

 public static long toUnsignedInt(byte[] bytes)
 {
     ByteBuffer buffer = ByteBuffer.allocate(8).put(new byte[]{0, 0, 0, 0}).put(bytes);
     buffer.position(0);

     return buffer.getLong();
 }
Run Code Online (Sandbox Code Playgroud)

请注意,此方法可以采用负 long 或超出 unsigned int 范围的 long,并且在这种情况下不会抛出异常!