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

时间:2014-07-17 10:08:34

标签: java arrays

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

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

是否有一个库(最好是Guava或Apache commons)?基本上,我正在寻找这样的东西:

int[] - > byte[]

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

byte[] - &gt; int[]

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

2 个答案:

答案 0 :(得分:0)

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

修改(已移除示例代码;已添加以下内容)

如果要重新解释与不同基元类型相同的字节,请使用ByteBuffer

声明后,您将获得对重新解释的字节的直接访问操作,例如

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

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

答案 1 :(得分:-1)

尝试:

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;