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 ,我得到了一个不同的整数值。 任何想法问题在哪里? 谢谢!
代码工作,因为它应该,如果你确实有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()
电话中得到的数组是一个支持数组,即:修改此缓冲区的内容将导致返回数组的内容被修改,反之亦然。
尝试了你的代码,字节顺序为LittleEndian。我得到的打印值为1677721600 –
这就是你得到的价值,如果你采取字节0,1,2,3,而不是1,2,3,4。 (也就是说,在我的答案中,如果您从1.5更改为0.4)。 – aioobe
第二个音符是否意味着我必须分别使用不同的ByteBuffer对象来转换每个实例变量?如果没有请详细解释 –
据我所看到的,B
是偏移1
对不起,错字。更正。 –
偏移量是一个:0,B 1,C:5。你需要价值是大端还是小端? –
我将字节顺序设置为Little Endian。但问题仍然存在 –