2013-11-01 41 views
0
String boxVal = "FB"; 
Integer val = Integer.parseInt(boxVal, 16); 
System.out.println(val); //prints out 251 
byte sboxValue = (byte) val; 
System.out.println("sboxValue = " + Integer.toHexString(sboxValue)); //fffffffb 

最後一行應該輸出「fb」。我不確定它爲什麼打印出「fffffffb」。 我在做什麼錯?我應該如何修復我的代碼以打印「fb」?將int轉換爲java中的字節

回答

1

爲什麼它打印「fffffffb」:因爲你先轉換成字節值(-5)轉換爲值爲-5的整數,然後打印該整數。

得到你想要的輸出最簡單的方法是:

System.out.printf("sboxValue = %02x\n", sboxValue); 

或者,你也可以使用:

System.out.println("sboxValue = " + Integer.toHexString(sboxValue & 0xff)); 

這裏發生的詳細內容:

字節值fb被轉換爲整數。由於該值爲負值,因爲您可以看到,因爲最左邊的位是1,所以符號擴展爲32位:fffffffb

通過屏蔽掉較低的8位(使用按位和操作&),我們得到整數值000000fb

+0

謝謝。但我不會將任何字節值轉換爲整數。 – Nayana

+0

@Nayana你這樣做,'Integer.toHexString'方法接受一個整數作爲參數。 – Henry

+0

不只是打印出來,如果我想使用該字節值,這是sboxvalue呢?例如,作爲一個字符串? – Nayana