2013-12-20 63 views
1

我想讀取包含大量無符號短符號和無符號字節值的二進制數據(Doom WAD文件)。如何從文件中讀取無符號值

此刻我將文件讀入一個byte [],將一個ByteBuffer以小端順序包裝在它周圍,並分別通過bbuf.getShort()等訪問這些值。

轉換那些e。 G。到二維座標不是一個問題,因爲最終它不會有問題,如果他們的範圍,例如。從-128到128或從0到256,但更多的時候,短值被用作數組索引和短/字節值作爲標誌/,所以我需要一種快速的方式將它們作爲有符號類型對待。 我知道,Java沒有無符號類型「爲了簡單...」。 你能提出什麼建議嗎?

回答

0

如果一切都失敗了,您可以將它們始終作爲整數存儲在內部,並確保在讀/寫時進行正確的轉換。

(讀作字節/短路,強制轉換爲int,如果爲負加2 ^位,只是書寫時截斷爲8/16位)。

幾乎沒有最完美的解決方案,我承認。

1

爲了保存未簽名的int s,您需要一個long。然後你需要截斷最後的32位。你可以使用下面的技巧來做到這一點。

final long UNSIGNED_INT_BITS = 0xffffffffL; 
int a = -3; 
long b = UNSIGNED_INT_BITS & a; 
System.out.println(a); 
System.out.println(b); 
System.out.println(Long.toHexString(UNSIGNED_INT_BITS)); 

輸出:

-3 
4294967293 
ffffffff 
0

如果需要interprete 0xFF的字節爲256執行以下操作

int n = b & 0xFF; 
相關問題