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”?

4

2 回答 2

2

将 251 转换为字节时会发生溢出。字节最小值为-128,最大值为127(含)

见这里:http ://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

于 2013-11-01T07:03:43.800 回答
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

于 2013-11-01T07:05:03.870 回答