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”?
答案 0 :(得分:2)
将251转换为字节时出现溢出。字节的最小值为-128,最大值为127(含)
见这里:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 1 :(得分: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
。