我有一个 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