在java中将int转换为byte

在java中将int转换为byte,java,byte,Java,Byte,最后一行应打印“fb”。我不知道为什么它会打印出“ffffffb” 我做错了什么?如何修复打印“fb”的代码?将251转换为字节时会出现溢出。字节的最小值为-128,最大值为127(含) 请参见此处:将251转换为字节时会出现溢出。字节的最小值为-128,最大值为127(含) 请参见此处:将251转换为字节时会出现溢出。字节的最小值为-128,最大值为127(含) 请参见此处:将251转换为字节时会出现溢出。字节的最小值为-128,最大值为127(含) 请参见此处:它为什么打印“ffffffb”

最后一行应打印“fb”。我不知道为什么它会打印出“ffffffb”
我做错了什么?如何修复打印“fb”的代码?

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


请参见此处:

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


请参见此处:

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


请参见此处:

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

请参见此处:

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

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

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
或者,您也可以使用:

System.out.printf("sboxValue = %02x\n", sboxValue);
这里发生的详细情况:

字节值
fb
转换为整数。由于该值是负数,正如您所看到的,因为最左边的位是1,所以它被符号扩展到32位:
fffffff b

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

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

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

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
或者,您也可以使用:

System.out.printf("sboxValue = %02x\n", sboxValue);
这里发生的详细情况:

字节值
fb
转换为整数。由于该值是负数,正如您所看到的,因为最左边的位是1,所以它被符号扩展到32位:
fffffff b

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

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

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

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
或者,您也可以使用:

System.out.printf("sboxValue = %02x\n", sboxValue);
这里发生的详细情况:

字节值
fb
转换为整数。由于该值是负数,正如您所看到的,因为最左边的位是1,所以它被符号扩展到32位:
fffffff b

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

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

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

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
或者,您也可以使用:

System.out.printf("sboxValue = %02x\n", sboxValue);
这里发生的详细情况:

字节值
fb
转换为整数。由于该值是负数,正如您所看到的,因为最左边的位是1,所以它被符号扩展到32位:
fffffff b



通过屏蔽低8位(使用按位and操作&),我们得到整数值
000000fb

谢谢。但我并没有将任何字节值转换为整数。@Nayana是的,
integer.toHexString
方法将整数作为参数。不只是为了打印,如果我想使用该字节值,即sboxvalue,该怎么办?例如,作为一个字符串,Java中的字节是一个有符号的量,可以保存-128到127之间的值。位模式fb对应于值-5(=251-256)。这就是所谓的负整数的二补表示法。哇。这修正了错误。非常感谢你。但我还是不太明白。你能解释一下-5是什么意思以及sboxValue&0xff背后的逻辑吗?谢谢。但我并没有将任何字节值转换为整数。@Nayana是的,
integer.toHexString
方法将整数作为参数。不只是为了打印,如果我想使用该字节值,即sboxvalue,该怎么办?例如,作为一个字符串,Java中的字节是一个有符号的量,可以保存-128到127之间的值。位模式fb对应于值-5(=251-256)。这就是所谓的负整数的二补表示法。哇。这修正了错误。非常感谢你。但我还是不太明白。你能解释一下-5是什么意思以及sboxValue&0xff背后的逻辑吗?谢谢。但我并没有将任何字节值转换为整数。@Nayana是的,
integer.toHexString
方法将整数作为参数。不只是为了打印,如果我想使用该字节值,即sboxvalue,该怎么办?例如,作为一个字符串,Java中的字节是一个有符号的量,可以保存-128到127之间的值。位模式fb对应于值-5(=251-256)。这就是所谓的负整数的二补表示法。哇。这修正了错误。非常感谢你。但我还是不太明白。你能解释一下-5是什么意思以及sboxValue&0xff背后的逻辑吗?谢谢。但我并没有将任何字节值转换为整数。@Nayana是的,
integer.toHexString
方法将整数作为参数。不只是为了打印,如果我想使用该字节值,即sboxvalue,该怎么办?例如,作为一个字符串,Java中的字节是一个有符号的量,可以保存-128到127之间的值。位模式fb对应于值-5(=251-256)。这就是所谓的负整数的二补表示法。哇。这修正了错误。非常感谢你。但我还是不太明白。你能解释一下-5是什么意思以及sboxValue&0xff背后的逻辑吗?