2014-06-20 41 views
0

我是Java新手(我來自C/C++),我需要讀取存儲在LittleEndian中的無符號4字節數。在Java中閱讀Little Endian unsigned long

我的功能不起作用(我剛剛完成互聯網上搜索,它似乎是正確的......)

public long readlU32() throws IOException { 
       long dword = 0; 
       for(int i = 0; i < 4; i++) 
         dword = (dword << 8) | readU8(); 
       return dword; 
     } 

我看到,這裏的其他問題,它應該工作...怎麼了?

PS:我要讀的值是0x94010000,因此該值應該是404,但程序讀取它爲2483093504(大端值)...

+3

java中的長整型是8個字節。你用8而不是4來嘗試嗎? – Treesrule14

+1

您正在將您讀取的第一個字節移到最左邊。這將使第一個字節最大,所以是的,你實現了大端閱讀。 –

回答

2

您正在轉移字節,使「最左「的字節仍然是」最左「的字節。您將404的位表示形式轉換爲小端表示,0x94010000轉換爲大端表示形式,即2483093504

試試這個,它會將每個讀取的字節從結尾開始移位到long字節。

for(int i = 0; i < 4; i++) 
{ 
    dword = dword | (readU8() << (8 * i)); 
} 
+0

謝謝!有用 :) –