Java 将 int 转换为十六进制并再次转换回来

2022-08-31 11:58:46

我有以下代码...

int Val=-32768;
String Hex=Integer.toHexString(Val);

这相当于ffff8000

int FirstAttempt=Integer.parseInt(Hex,16); // Error "Invalid Int"
int SecondAttempt=Integer.decode("0x"+Hex);  // Error "Invalid Int"

因此,最初,它将值 -32768 转换为十六进制字符串 ffff8000,但随后它无法将十六进制字符串转换回整数。

在它的工作,正如我所期望的那样,和..Netreturns -32768

我知道我可以自己编写自己的小方法来转换它,但我只是想知道我是否错过了什么,或者这是否真的是一个错误?


答案 1
int val = -32768;
String hex = Integer.toHexString(val);

int parsedResult = (int) Long.parseLong(hex, 16);
System.out.println(parsedResult);

这就是你如何做到这一点。

它不按您的方式工作的原因:采用有符号的int,同时产生未签名的结果。因此,如果插入高于 的值,则会自动引发错误。如果将其解析为,则仍将对其进行签名。但是,当您将其转换回int时,它将溢出到正确的值。Integer.parseInttoHexString0x7FFFFFFlong


答案 2

它会溢出,因为该数字为负数。

试试这个,它会工作:

int n = (int) Long.parseLong("ffff8000", 16);