0

リトルエンディアン ファイルから整数を読み取るために使用している java.nio.MappedByteBuffer があります。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 として読み取ると、0x00000003 ではなく 0x03000000 が返されます。

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

ここで何が起こっているのですか?

Sun Microsystems Inc. での Java 1.6.0_17-b04 の使用 Java HotSpot(TM) 64 ビット サーバー VM 混合モード MATLAB R2011b の使用

4

1 に答える 1

2

You are writing bytes 4,5,6,7 but reading bytes 1,2,3,4. This makes byte 4 (which is the only one with a value) appear at the end instead of the start,

Try instead

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