2013-11-01 217 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