問題:
比較byte數組的值時:
boolean match = ((data[0] & 0xFF) == 0xFE);
然後返回真值,但是:
boolean match (data[0] == 0xFE);
返回的就不是真值,為啥?
data這樣就會byte數組:
data[0] = (byte) 0xFE;
boolean match = ((data[0] & 0xFF) == 0xFE);
這句是因為把0xFF
當做整數來比較,它會自動轉換data[0]
為整數型。圓括號裡面的0xFE (254)
也會同樣轉換。 就像你說的data[0]是(byte)0xFE。因此會當做整形0xFE 與整形的0xFE 比較,因此會返回正確結果。
boolean match (data[0] == 0xFE);
比較byte和int0xFE : 254
data[0] = (byte) 0xFE;
是byte類型,值是-2
-2和254值不相等, 所以你比較起來和前面結果會不一樣
如果簡化比較:
boolean match = (data[0] == (byte)0xFE);