0

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

确认我们在字节 4-7 中有小端序中的数字 3

>> 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

4

1 回答 1

2

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

试试吧

>> sprintf( '%.8x', qfunction.s_idx.getInt(4) )
于 2012-04-19T17:57:48.920 回答