我在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;