在java中将int转换为byte

时间:2013-11-01 06:58:48

标签: java byte

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

2 个答案:

答案 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