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

最佳答案

为什么打印“ fffffffb”:因为您首先将字节值(为-5)转换为值为-5的整数,然后打印该整数。

获得所需输出的最简单方法是:

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


或者,您也可以使用:

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


详细情况如下:

字节值fb转换为整数。由于值是负数(如您所见,因为最左边的位是1),因此将其符号扩展为32位:fffffffb

通过屏蔽低8位(按位和运算符&),我们得到整数值000000fb

10-02 23:17