整型数组到字节数组,每个字节有一个整数



我在SO上找到的所有相关问题都描述了byte数组和int数组之间的转换,其中4个字节被转换为单个整数,反之亦然。

我正在寻找的是将每个整数转换为单个字节,反之亦然,知道整数数组的值都不超过无符号byte的范围。

是否有这样的库(最好是Guava或Apache commons)?实际上,我在寻找这样的内容:

int[] -> byte[]

for (int i = 0; i < intArray.length; i++){
  byteArray[i] = (byte) intArray[i];
}

byte[] -> int[]

for (int i = 0; i < byteArray.length; i++){
  intArray[i] = 0xff & byteArray[i];
}

在Java中不能以这种方式强制转换数组。我敢说,VM只是不允许你将数组中的字节重新解释为不同的类型。我假设您可以使用一些依赖于平台的JNI魔法来实现它,但这将是非常黑客的。

Edit(删除示例代码;添加以下)

如果要将相同的字节重新解释为不同的基本类型,请使用ByteBuffer。

声明后,您可以直接访问重新解释的字节,例如

myByteBuffer.getInt(1);  // reads bytes 4, 5, 6, 7 as an int
myByteBuffer.getByte(5); // reads byte 5 as a byte

您也可以从中提取原始数组,但是会涉及到额外的分配。

尝试:

int number  = 54353, divisor = 256;
byte[] byteArray = new byte[4];
byteArray[3] = number%divisor;
number = number/divisor
byteArray[2] = number%divisor;
number = number/divisor
byteArray[1] = number%divisor;
number = number/divisor
byteArray[0] = number;

最新更新