java - 在 java 中巧妙地将 byte[] 转换为 long[]

标签 java arrays for-loop

我有一个字节数组,需要重新打包成一个长整数数组。输入字节数组的大小未知(大约从 0 到几百)。 long 数组需要右对齐 即最低索引 long 应该用零填充,所有其他的应该充满输入字节: . (b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11) --> (xxxxb0b1b2b3, b4b5b6b7b8b9b10b11)

其中 b1、b2 等是给定的字节。 我有一个解决方案,但它不是很整洁或可读:

// outArr has length (inArr.length+7)/8

for (int i = 0; i < inArr.length ; i++) {     
    outArr[outArr.length - i/8 - 1] |= ((long)inArr[inArr.length - i - 1]) << (i % 8) * 8;
    }

有没有更简单的方式来做到这一点?

最佳答案

可能有更优雅的方法,但一种方法是使用 java.nio 缓冲区来转换它。由于需要将输入数组对齐到 8 字节 block ,因此需要更多步骤:

int padding = outArr.length * 8 - inArr.length;
ByteBuffer buffer = ByteBuffer.allocate(inArr.length + padding)
                              .put(new byte[padding]).put(inArr);
buffer.flip();
buffer.asLongBuffer().get(outArr);

关于java - 在 java 中巧妙地将 byte[] 转换为 long[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37778495/

相关文章:

java - 从 JSONException 中恢复

javascript - inArray() 一直返回 false

c - 如何在 C 中将基于文本的数据文件读入数组?

c# - 为什么 System.Array 不能是类型约束?

java - Gmail REST API : 400 Bad Request + Failed Precondition

java - Java/Tomcat 多线程(?)问题中的 RESTful 服务

java - 打印 ArrayList Integer 的值

windows - 为什么我的 IF 比较运算失败?

python - 如何调整for循环的重复次数?

java - 为什么我不能启动这个简单的 FXML hello world 应用程序?