我在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];
}
答案 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;