Java字节缓冲区:尝试在字节缓冲区数组中为十进制值256插入两个字节

Java字节缓冲区:尝试在字节缓冲区数组中为十进制值256插入两个字节,java,byte,buffer,Java,Byte,Buffer,我有一个Java的ByteBuffer,我正在用数据填充它。在用数据填充缓冲区之前,我先保存前两个字节,以便以后填充: buffer.put((byte)0); //position 0 buffer.put((byte)0); //position 1 然后我用数据填充缓冲区并计算我插入的数据的总大小,最大可达256。因此,我需要将我插入的数据的总大小放在BufferArray的前两个位置,这就是我以前保存它们的原因 因此,如果我这样做: buffer.put(1,(byte)x); //

我有一个Java的ByteBuffer,我正在用数据填充它。在用数据填充缓冲区之前,我先保存前两个字节,以便以后填充:

buffer.put((byte)0); //position 0
buffer.put((byte)0); //position 1
然后我用数据填充缓冲区并计算我插入的数据的总大小,最大可达256。因此,我需要将我插入的数据的总大小放在BufferArray的前两个位置,这就是我以前保存它们的原因

因此,如果我这样做:

buffer.put(1,(byte)x); // x between 0 and 255
当x在0和255之间时,我只需要1字节位置1。运行代码后,我可以看到十六进制结果,例如00 FF x=255。255是十六进制的FF


现在如果X=256,我得到00,我需要得到01 00,十六进制的256是100。当x=256时,我需要2个字节。现在,我该如何解决这个问题?如果我不够清楚,我可以提供更多信息。谢谢。

您似乎正在使用big-endian,因此需要:

buffer.put( 1, (byte)x );
buffer.put( 0, (byte)(x >> 8) );

如果以后发现需要使用小尾端,则需要交换0和1。

您似乎正在使用大尾端,因此需要:

buffer.put( 1, (byte)x );
buffer.put( 0, (byte)(x >> 8) );

如果以后发现需要使用little endian,则需要交换0和1。

此任务应使用ByteBuffer.putShort。

此任务应使用ByteBuffer.putShort。

您的问题尚不清楚。你得到了什么,你期望得到什么?注意,Java中的字节不是0..255,而是-128..127。是的,我怀疑我的解释不是很好,但我想他们已经回答了我。无论如何,你的问题还不清楚。你得到了什么,你期望得到什么?注意,Java中的字节不是0..255,而是-128..127。是的,我怀疑我的解释不是很好,但我想他们已经回答了我。无论如何是的,我怀疑它可能涉及二进制右移!我认为你的答案是正确的,但我只能明天测试。谢谢,明天我会确认的,我想是big endian。但我建议你检查一下EJP的答案。我查阅了ByteBuffer,以前从未使用过它,它似乎提供了指定endianness的功能,因此putShort很可能是比我的答案更好的选择。是的,我怀疑它可能涉及二进制右移!我认为你的答案是正确的,但我只能明天测试。谢谢,明天我会确认的,我想是big endian。但我建议你检查一下EJP的答案。我查阅了ByteBuffer,以前从未使用过它,它似乎提供了指定endianness的功能,因此putShort很可能是比我的答案更好的选择。