【问题标题】:MappedByteBuffer byte orders reversed?MappedByteBuffer 字节顺序颠倒了?
【发布时间】:2012-05-01 07:05:06
【问题描述】:

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

【问题讨论】:

    标签: java matlab bytebuffer


    【解决方案1】:

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

    试试吧

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

    【讨论】:

    • 您先生,是一位绅士和一位学者。为了向其他人澄清,我将 ByteBuffer.getInt() 的参数视为整数数组的索引(1 =“我想要第二个整数),而它实际上是一个字节偏移量。
    • 也许IntBuffer ib = byteBuffer.asIntBuffer(); 更符合您的喜好。 ;)
    猜你喜欢
    • 2019-01-12
    • 2021-06-10
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多