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

标签 java byte uint32

我正在写入具有 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/

相关文章:

java - 如何在android中的项目单击中从 ListView 中获取歌曲

java - 如何用 Java 打印接下来的 20 个闰年

c# - 按位将 int 转换为 UInt32 的最快方法?

c - 如何将 uint32 转换为 unsigned char 数组

java - 如何从 Activity 中执行在已启动服务上定义的方法并取回结果?

java - j2me 中提供程序类的替代方案是什么

Java:InputStream read() 返回一个大于 127 的字节?

hash - 实现 MD5 : Inconsistent endianness?

python - Python 中的字节操作

c++ - 在 C++ 中连接 char[] 和 uint32_t