2012-04-19 106 views
0

我有一个java.nio.MappedByteBuffer,我正在使用从小端文件读取整数。我使用ByteBuffer.order()将字节顺序设置为LITTLE_ENDIAN,但这会导致缓冲区将整数解释为大端。MappedByteBuffer字节顺序颠倒?

确认我们已经3号在小尾数字节4-7

​​

读为LITTLE_ENDIAN回报0x03000000,而不是0x00000003!

>> qfunction.s_idx.order(java.nio.ByteOrder.LITTLE_ENDIAN); 
>> sprintf('%.8x', qfunction.s_idx.getInt(1)) 

ans = 

03000000 

读为BIG_ENDIAN不会返回3!*

>> qfunction.s_idx.order(java.nio.ByteOrder.BIG_ENDIAN); 
>> sprintf('%.8x', qfunction.s_idx.getInt(1)) 

ans = 

00000003 

这到底是怎么回事?

使用Java 1.6.0_17-B04与Sun公司的Java的HotSpot(TM)64位服务器VM混合模式 使用MATLAB R2011b

回答

2

你写字节4,5,6,7但读取字节1,2,3,4。这使得4个字节(这是唯一一个有值)也会出现在最后,而不是开始,

尝试,而不是

>> sprintf('%.8x', qfunction.s_idx.getInt(4)) 
+0

你的先生,是一个绅士和学者。为了澄清他人,我将ByteBuffer.getInt()的参数当作是一个整数数组的索引(1 =“我想要第二个整数”),当它实际上是一个字节偏移量时 – Clark 2012-04-19 18:38:24

+0

也许'IntBuffer ib = byteBuffer.asIntBuffer();'更符合你的喜好。 – 2012-04-19 19:44:57