對於從字節到整數的轉換,我有點困惑。請看下面的代碼:將字節轉換爲整數時的問題(Java特定?)
byte[] data = new byte[] { 0, (byte) 0xF0 };
int masked = data[0] << 8 & 0xFF | data[1] & 0xFF; //240
int notMasked = data[0] << 8 | data[1]; //-16
因爲在Java字節簽署,不是240小數,而是2的補,-16。但是,它應該仍然是二進制:0x11110000
那麼,爲什麼我需要做data[1] & 0xFF
?
Java是否將所有內容都轉換爲Integer,然後將其傳遞給|
運算符?爲什麼&0xFF
然後呢?
我前段時間做了一些代碼的C到Java端口,它使用了很多按位操作,並提出了一個[helper class](https://github.com/pillingworthz/level9j/blob/master/src/java/uk /co/threeonefour/l9/vm/Conv.java)讓事情變得更簡單。沒有關於這些質量或效率的保證,但他們爲我做了這份工作。 – pauli