【发布时间】:2015-12-14 08:38:03
【问题描述】:
我正在尝试简化一些用于解码文件中数据的代码,并且我已经编写了一个测试用例来说明这个问题。
给定两个字节 0xFe 和 0xFF 我希望将其读取为 0xFFFE (65534),
现有的代码可以
headerBuffer.get() & 0xff + (headerBuffer.get() & 0xff) * 256
我想,如果我将缓冲区字节顺序设为小端,我可以通过读取为短字节来获得相同的结果。但是我没有得到相同的结果,为什么不呢?
headerBuffer.getShort();
public void testReadingOfShort() {
ByteBuffer headerBuffer = ByteBuffer.allocate(2);
headerBuffer.order(ByteOrder.LITTLE_ENDIAN);
headerBuffer.put((byte) 0xFE);
headerBuffer.put((byte)0xFF);
headerBuffer.position(0);
int format = headerBuffer.get() & 0xff + (headerBuffer.get() & 0xff) * 256;
headerBuffer.position(0);
int formatNew = headerBuffer.getShort();
System.out.println("Format:"+format+"("+ Hex.asHex(format)+")"+":FormatNew:"
+formatNew+"("+Hex.asHex(formatNew)+")");
}
输出
Format:65534(0xfffe):FormatNew:-2(0xfffffffffffffffe)
【问题讨论】:
-
这是因为
short已签名!无论如何,我怀疑这里的错误在于Hex类;显示所有.asHex()方法的代码
标签: java io nio bytebuffer