2012-04-19 188 views
0

我有一個java.nio.MappedByteBuffer,我正在使用從小端文件讀取整數。我使用ByteBuffer.order()將字節順序設置爲LITTLE_ENDIAN,但這會導致緩衝區將整數解釋爲大端。MappedByteBuffer字節順序顛倒?

確認我們已經3號在小尾數字節4-7

​​

讀爲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公司的Java的HotSpot(TM)64位服務器VM混合模式 使用MATLAB R2011b

回答

2

你寫字節4,5,6,7但讀取字節1,2,3,4。這使得4個字節(這是唯一一個有值)也會出現在最後,而不是開始,

嘗試,而不是

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

你的先生,是一個紳士和學者。爲了澄清他人,我將ByteBuffer.getInt()的參數當作是一個整數數組的索引(1 =「我想要第二個整數」),當它實際上是一個字節偏移量時 – Clark 2012-04-19 18:38:24

+0

也許'IntBuffer ib = byteBuffer.asIntBuffer();'更符合你的喜好。 – 2012-04-19 19:44:57