ByteBuffer api给出错误的整数值

问题描述:

我正在使用ByteBuffer API将对象转换为字节。对象的类是如下ByteBuffer api给出错误的整数值

public class Obj{ 
int a; // size 1 byte 
int b; // size 4 bytes 
int c; // size 4 bytes 
} 

使用的ByteBuffer API,我已分配的对象

ByteBuffer bbf = ByteBuffer.allocate(9); 
bbf.put((byte) this.getA()); 
bbf.putInt(this.getB()); 
bbf.putInt(this.getC()); 
byte[] msg = bbf.array(); 

我设置B的值作为100,但是当我转换字节数组从直到长度为4的偏移1 ,我得到了一个不同的整数值。 任何想法问题在哪里? 谢谢!

+0

偏移量是一个:0,B 1,C:5。你需要价值是大端还是小端? –

+0

我将字节顺序设置为Little Endian。但问题仍然存在 –

代码工作,因为它应该,如果你确实有1,2,3,4指数选择字节,他们将获得价值100:

ByteBuffer bbf = ByteBuffer.allocate(9); 
bbf.put((byte) 10); 
bbf.putInt(100); 
bbf.putInt(55); 
byte[] msg = bbf.array(); 

byte[] from4to8 = Arrays.copyOfRange(msg, 1, 5); 

ByteBuffer buf2 = ByteBuffer.wrap(from4to8); 
System.out.println(buf2.getInt());    // Prints 100 

一些注意事项:

  • 请记住,在端可以根据系统的不同(所以检查端Ø ñ两台主机上,如果这是协议的一部分)
  • 您从bbf.array()电话中得到的数组是一个支持数组,即:

    修改此缓冲区的内容将导致返回数组的内容被修改,反之亦然。

+0

尝试了你的代码,字节顺序为LittleEndian。我得到的打印值为1677721600 –

+0

这就是你得到的价值,如果你采取字节0,1,2,3,而不是1,2,3,4。 (也就是说,在我的答案中,如果您从1.5更改为0.4)。 – aioobe

+0

第二个音符是否意味着我必须分别使用不同的ByteBuffer对象来转换每个实例变量?如果没有请详细解释 –

据我所看到的,B是偏移1

+0

对不起,错字。更正。 –