リトルエンディアン ファイルから整数を読み取るために使用している 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 の使用