2017-05-24 35 views
1

我在Java中使用了这个ByteBuffer,我用数据填充。填充数据的缓冲区之前,我保存了前两个字节后填写:Java ByteBuffers:试图在字节缓冲区数组中插入两个字节的十进制值256

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 00,并且我需要得到01 00(十六进制中的256是100)。当x = 256时,我需要2个字节。现在,我该如何解决这个问题?如果我不够清楚,我可以提供更多信息。谢谢。

+0

你的问题还不清楚。你会得到什么,你期望得到什么?请注意,Java中的一个字节不是0..255,而是-128..127。 – RealSkeptic

+0

是的,我怀疑我的解释不是很好,但我认为他们已经回答了我。 Thx无论如何 – CJunior

回答

2

你似乎是使用大端,所以你需要这样的:

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

如果以后发现你需要小端而不是,那么你将需要交换的0和1

+0

是的,我怀疑它可能涉及二进制右移!我认为你的回答是正确的,但我明天只能测试。谢谢,明天病情确认 – CJunior

+0

而且这是大端序号我认为 – CJunior

+1

当然。但我建议你检查EJP的答案。我查了一下'ByteBuffer'(以前从来没有用过),它似乎提供了指定字节序的能力,所以'putShort()'最可能是比我的答案更好的选择。 –

2

您应该为此任务使用ByteBuffer.putShort()

+0

它也可以...谢谢:) – CJunior