2016-03-27 85 views
1

所以我在這裏有一個小問題,我不知道什麼是錯的。 這就是爲什麼我問這是否(我現在給你看)是正確的。 我將二進制文件轉換爲字節列表,以便我可以將這些字節轉換爲半字節。 例如: 如果我得到96作爲十進制數(60作爲十六進制)我想得到6和0出來。與127(十六進制:7F)相同的東西 - 我想得到7和15.爲了實現這個,我寫了下面的代碼: 你會注意到,我需要「無符號字節」才能工作將一個有符號的字節變成一個無符號的半字節

System.out.println((byte) ((UnsignedByte.unsignedToBytes(b) - (UnsignedByte.unsignedToBytes(b) % 16))/16)); 
System.out.println((byte) (UnsignedByte.unsignedToBytes(b) % 16)); 

public static int unsignedToBytes(byte b) { 
    return b & 0xFF; 
} 

我做錯了什麼或者這不是問題?

+0

問題是什麼? – Natecat

+0

我得到錯誤的座標錯誤值,我只想知道問題是否在這裏 – RoiEX

回答

1

使用位移位和位操作:

  • 爲了獲得低四位,用lowerNibble = wholeByte & 0x0F
  • 要獲得高四位,使用upperNibble = (wholeByte >> 4) & 0x0F

這無視標誌,因爲該號碼的上半部分被截斷了& 0x0F

+0

這是否工作值大於0x80? – RoiEX

+0

@RoiEX絕對如此。 – dasblinkenlight

相關問題