我正在写入具有 uint32 的存储格式,最大允许值为“4294967295”。
当然,Java 中的整数仅不到“2147483647”的一半。所以在内部,我必须使用 Long 或 Guava 的 UnsignedInteger。
要写入这种格式,字节数组长度需要为 4,这正好适合 Integer,但将 Long 转换为字节数组需要长度为 8 的数组。
如何将表示最大值“4294967295”的 Long 或 UnsignedInteger 转换为 4 字节数组?
最佳答案
只需将其转换为 8 字节数组,然后仅获取最后 4 个字节:
public static byte[] fromUnsignedInt(long value)
{
byte[] bytes = new byte[8];
ByteBuffer.wrap(bytes).putLong(value);
return Arrays.copyOfRange(bytes, 4, 8);
}
要扭转这种情况,您可以使用以下方法:
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();
}
请注意,此方法可以采用负 long 或超出 unsigned int 范围的 long,并且在这种情况下不会引发异常!
关于Java uint32(存储为long)到4字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44853653/