如何在java中将int转换为hex?
我得到结果ffffff80,为什么不是80?如何在java中将int转换为hex?,java,byte,Java,Byte,我得到结果ffffff80,为什么不是80? 当x=127时,我得到了结果7f。这是因为128的正值不能用有符号字节表示 范围为-128到127 所以int变成了符号扩展,所以不是0x00000080,而是0xffffff80 编辑:如其他人所述: 整数128与字节(-128)共享最后8位 不同之处在于整数128具有前导零 public void int2byte(){ int x = 128; byte y = (byte) x; System.out.println(
当x=127时,我得到了结果7f。这是因为128的正值不能用有符号字节表示 范围为
-128到127
所以int变成了符号扩展,所以不是0x00000080,而是0xffffff80
编辑:如其他人所述:
整数128与字节(-128)共享最后8位
不同之处在于整数128具有前导零
public void int2byte(){
int x = 128;
byte y = (byte) x;
System.out.println(Integer.toHexString(y));
}
而字节-128只是
0x00000080 (0000 0000 0000 0000 0000 0000 1000 0000)
当您使用Integer.toHexString()
转换字节-128时,它取前导的1,并对其进行符号扩展,从而得到
0x80 (1000 0000)
这是因为128的正值不能用有符号字节表示 范围为
-128到127
所以int变成了符号扩展,所以不是0x00000080,而是0xffffff80
编辑:如其他人所述:
整数128与字节(-128)共享最后8位
不同之处在于整数128具有前导零
public void int2byte(){
int x = 128;
byte y = (byte) x;
System.out.println(Integer.toHexString(y));
}
而字节-128只是
0x00000080 (0000 0000 0000 0000 0000 0000 1000 0000)
当您使用Integer.toHexString()
转换字节-128时,它取前导的1,并对其进行符号扩展,从而得到
0x80 (1000 0000)
字节是用Java签名的。当您将
128
强制转换为字节时,它将变成-128
int
128
:00000000 00000000 00000000 10000000
字节-128
:10000000
然后,当您使用Integer.tohextstring
将其加宽回int
时,因为它现在是负数,所以它会得到符号扩展。这意味着会出现一堆1
位,解释十六进制输出中额外的f
字符
可以使用以无符号方式转换它,以防止符号扩展
通过无符号转换将参数转换为int
。在到int
的无符号转换中,int
的高位24位为零,低位8位等于byte
参数的位
另一种方法是通过手动仅保留字节的8位来屏蔽符号扩展位:
System.out.println(Integer.toHexString(Byte.toUnsignedInt(y)));
无论哪种方式,输出都是:
System.out.println(Integer.toHexString(y & 0xFF));
字节是用Java签名的。当您将128
强制转换为字节时,它将变成-128
int
128
:00000000 00000000 00000000 10000000
字节-128
:10000000
然后,当您使用Integer.tohextstring
将其加宽回int
时,因为它现在是负数,所以它会得到符号扩展。这意味着会出现一堆1
位,解释十六进制输出中额外的f
字符
可以使用以无符号方式转换它,以防止符号扩展
通过无符号转换将参数转换为int
。在到int
的无符号转换中,int
的高位24位为零,低位8位等于byte
参数的位
另一种方法是通过手动仅保留字节的8位来屏蔽符号扩展位:
System.out.println(Integer.toHexString(Byte.toUnsignedInt(y)));
无论哪种方式,输出都是:
System.out.println(Integer.toHexString(y & 0xFF));
因为toHexString()
需要一个int
参数,所以使用符号扩展将带符号的byte
扩展为int
。127(int)=-128(byte)=-128(int)=0xffffff80(int),因为toHexString()
需要一个int
参数,因此,使用符号扩展将带符号的字节
扩展为int
。127(int)=-128(byte)=-128(int)=0xffffff80(int)正确,但不完整。您应该显示实际的字节
值是什么,即-128
,并解释符号扩展出现的原因和位置。正确,但不完整。您应该显示实际的字节
值是什么,即-128
,并解释符号扩展发生的原因和位置。或者通过使用移位运算符:将8位移到左外,然后将其无符号移回右外System.out.println(Integer.tohextstring(y>>24));//80或通过使用移位运算符:将8位移到左外,然后将其无符号移回右外System.out.println(Integer.tohextstring(y>>24));//80