Java小端序
我需要将数据存储为Java小端序,java,byte,bytearray,bytecode,Java,Byte,Bytearray,Bytecode,我需要将数据存储为LITTLE\u ENDIAN而不是默认的BIG\u ENDIAN 以下是我的示例代码: for (int i = 0; i < logo.length; i++) { logoArray[i] = ((Integer) logo[i]).byteValue(); logoArray[i] = (byte) (((logoArray[i] & 1) << 7) + ((logoArray[i] & 2) << 5) + (
LITTLE\u ENDIAN
而不是默认的BIG\u ENDIAN
以下是我的示例代码:
for (int i = 0; i < logo.length; i++) {
logoArray[i] = ((Integer) logo[i]).byteValue();
logoArray[i] = (byte) (((logoArray[i] & 1) << 7) + ((logoArray[i] & 2) << 5) + ((logoArray[i] & 4) << 3)
+ ((logoArray[i] & 8) << 1) + ((logoArray[i] & 16) >> 1) + ((logoArray[i] & 32) >> 3)
+ ((logoArray[i] & 64) >> 5) + ((logoArray[i] & 128) >> 7));
}
如果您使用
putin
而不是put
,则ByteBuffer将为您工作
record.putInt((Integer) logo[i]);
字节数组(如
Integer.byteValue()
)没有“endianness”,因此它按原样存储。正如andcoz所说,当一次放入一个字节时,不会考虑endian。下面是一个示例,向您展示如何执行此操作:
import java.nio.*;
public class Test {
public static void main(String[] args) {
int[] logo = { 0xAABBCCDD, 0x11223344 };
byte[] logoLE = new byte[logo.length * 4];
ByteBuffer rec = ByteBuffer.wrap(logoLE).order(ByteOrder.LITTLE_ENDIAN);
for (int i = 0; i < logo.length; i++)
rec.putInt(logo[i]);
// Debug printouts...
System.out.println("logo:");
for (int b : logo)
System.out.println(Integer.toHexString((b < 0 ? b + 256 : b)));
System.out.println("\nlogoLE:");
int tmp = 0;
for (byte b : logoLE) {
System.out.print(Integer.toHexString((b < 0 ? b + 256 : b)));
if (++tmp % 4 == 0)
System.out.println();
}
}
}
您需要将数据存储在哪里?因此您也不需要(整数)强制转换。在这个问题中,我们不清楚logo[]是否是一个整数数组,所以我将其保留了下来。
import java.nio.*;
public class Test {
public static void main(String[] args) {
int[] logo = { 0xAABBCCDD, 0x11223344 };
byte[] logoLE = new byte[logo.length * 4];
ByteBuffer rec = ByteBuffer.wrap(logoLE).order(ByteOrder.LITTLE_ENDIAN);
for (int i = 0; i < logo.length; i++)
rec.putInt(logo[i]);
// Debug printouts...
System.out.println("logo:");
for (int b : logo)
System.out.println(Integer.toHexString((b < 0 ? b + 256 : b)));
System.out.println("\nlogoLE:");
int tmp = 0;
for (byte b : logoLE) {
System.out.print(Integer.toHexString((b < 0 ? b + 256 : b)));
if (++tmp % 4 == 0)
System.out.println();
}
}
}
logo:
aabbccdd
11223344
logoLE:
ddccbbaa
44332211