我有一个java.nio.MappedByteBuffer,用于从一个小的endian文件中读取整数。我使用LITTLE_ENDIAN ()将字节顺序设置为ByteBuffer.order,但这会导致缓冲区将整数解释为大端字节。
确认我们有以字节4-7为单位的小endian数字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这里发生什么事情?
使用Java1.6.0_17-B04与Sun Microsystems公司的Java HotSpot(TM) 64位服务器VM混合模式
发布于 2012-04-19 17:57:48
您正在写入字节4,5,6,7,但读取字节1,2,3,4。这使得字节4(这是唯一有值的字节)出现在末尾而不是开头,
试一试
>> sprintf( '%.8x', qfunction.s_idx.getInt(4) )https://stackoverflow.com/questions/10233627
复制相似问题