我正在写入具有 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);
}
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,并且在这种情况下不会抛出异常!
| 归档时间: |
|
| 查看次数: |
11728 次 |
| 最近记录: |