MappedByteBuffer字节顺序是否反转?

时间:2012-04-19 17:37:16

标签: java matlab bytebuffer

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

确认我们在小字节中有数字3,以字节4-7

>> sprintf( '%.2x ', qfunction.s_idx.get(4), qfunction.s_idx.get(5), qfunction.s_idx.get(6), qfunction.s_idx.get(7) )

ans =

03 00 00 00 

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 Microsystems Inc.一起使用Java HotSpot(TM)64位服务器VM混合模式 使用MATLAB R2011b

1 个答案:

答案 0 :(得分:2)

您正在编写字节4,5,6,7但是读取字节1,2,3,4。这使得字节4(这是唯一具有值的字节)出现在结尾而不是开头,

尝试改为

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