我有一个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
答案 0 :(得分:2)
您正在编写字节4,5,6,7但是读取字节1,2,3,4。这使得字节4(这是唯一具有值的字节)出现在结尾而不是开头,
尝试改为
>> sprintf( '%.8x', qfunction.s_idx.getInt(4) )