Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中将int转换为hex?_Java_Byte - Fatal编程技术网

如何在java中将int转换为hex?

如何在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(

我得到结果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(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