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
。