2017-09-09 78 views
0

我正在編寫一個文件來存儲有關地圖上位置的信息,例如對象會產生的位置。 我寫一個字節的文件和字節內會有x和y座標我會如何解析它們從文件將多個值存儲在一個字節中

int typeData = stream.readByte(); 
int x = typeData >> 2; 
int y = typeData & 3; 

這是我想達到什麼樣的一個例子。 什麼我不知道是什麼,我會在寫作過程中做到,例如

outStream.writeByte((x << 2) + (y | 3)); 

這是一個例子,該代碼尚未經過測試,並有可能是錯誤的。

+0

有2位,'y'的唯一可能值是0,1,2和3.這就夠了嗎?目前還不清楚爲什麼你覺得你需要將值包裝成像這樣的位串。內存和磁盤空間相當便宜,爲'x'和'y'分配整個'int'不應該導致問題。你需要解釋你最近想要解決的問題。 –

+0

操縱字節是彙編程序時代的做法。今天絕對沒有必要這樣做。 –

+0

我只有解析器的一些信息,我試圖讀取一個文件,並且想爲它創建一個編寫器,這樣我就可以將更多信息保存到該文件中,但重寫該文件會更好嗎? (data)>> – JavaGuy

回答

1

請注意,字節數據類型是一個8位有符號二進制補碼整數。因此,值包括-128到+127。

所以當你用int變量(x和y)計算位運算時,你是對的,就像這樣:(x << 2) + (y | 3)。然後你可以轉換爲一個字節或者讓Java自動轉換結果,只有在調用writeByte()的最後一步。

你肯定需要更多的8位來存儲你的座標。要訪問存儲在文件中的二進制數據,請記住使用標準Java java.nio.ByteBuffer API時,字節緩衝區的初始順序始終爲BIG_ENDIAN。

+0

int get_writeByte((20 << 2)+(15 & 3)); int data = dataIn.readByte(); int x =(data >> 2); int y =(data >> 2 | 3 ); //輸出X:20 Y:23應該是20和15 – JavaGuy

+0

使用2位來存儲15是不可能的,使用4位:'(20 << 4)+(15&(1 << 4 - 1 ))'。 –

+0

噢謝謝你:) – JavaGuy

相關問題