从byte []转换为int时获取错误的数字

时间:2011-11-14 10:46:17

标签: java bytearray endianness

我正在尝试将int转换为byte []并再次返回,但我认为我在做错了。我的代码基本上是:

byte[] array = new byte[4];
array[3] = (byte) ( num & 0xFF);   
array[2] = (byte) ((num >> 8) & 0xFF);   
array[1] = (byte) ((num >> 16) & 0xFF);   
array[0] = (byte) ((num >> 24) & 0xFF);

for (int i =0; i < 4; i++) {
    num = (num << 8) + (array[i] & 0xff);
}

如果我从数字72开始,例如,在将其转换为字节数组并返回后,我得到数字795108710.我错过了一步,或者可能是我的结尾混淆了?谢谢你的时间。

2 个答案:

答案 0 :(得分:3)

使用ByteBuffer;它包含编码许多不同数据类型的方法,而无需担心字节序等:

ByteBuffer bb = ByteBuffer.allocate(32);
bb.putInt(index, 72);
...

int value = bb.getInt(index);

答案 1 :(得分:0)

试试这个:

array[3]=(byte)(num & 0xFF);
array[2]=(byte)(num & 0x0000FF00);
array[1]=(byte)(num & 0x00FF0000);
array[0]=(byte)(num & 0xFF000000);

要取回它:

num=(int)(array[0]&0xFF) | (int)(array[1]&0xFF) | (int)(array[2]&0xFF) | (int)(array[3]&0xFF);

如果您愿意,可以尝试循环:

for(int i=0; i<4; i++)
{
 num=num+(int)(array[i]&0xFF);
}

这个是在C#中。不确定它是否适用于Java。但我认为,会这样做。