HI我想从十六进制字符串中获取精确的整数值。
我的问题是我的整数值为-25
,其十六进制字符串为" E7"
但是当我使用
转换-25时public static String toHexString(int i) {
String hexString = Integer.toHexString(i);
if (hexString.length() % 2 != 0) {
hexString = "0" + hexString;
}
return hexString.toUpperCase();
}
上述功能返回" FFFFE7"
当我将其转换为使用
获取231
的十进制值时
int len =Integer.parseInt(Hex,16);
我收到错误"无效的Int"
但当我将其手动转换为整数值
时 int len =Integer.parseInt("E7",16);
我得到结果为231。
所以任何人都可以告诉我如何通过传递整个十六进制字符串来获得完整的整数?
因为我的十六进制字符串是动态的所以我无法解决它。
答案 0 :(得分:0)
public static void main(String[] args) {
String hex = Integer.toHexString(-25);
System.out.println("hex is :: " + hex);
int n = (int) Long.parseLong(hex, 16);
System.out.println("int is :: " + n);
}
<强>输出强>
hex is :: ffffffe7
int is :: -25
答案 1 :(得分:0)
由于数字是负数,它会溢出。 Integer.parseInt()
获取signed int
,而toHexString()
产生unsigned
结果。
您应该使用Long.parseLong(hex, 16);
例如:
String hex = Integer.toHexString(-25);
System.out.println(hex);
try {
int len =Integer.parseInt(hex,16);
System.out.println(len);
}catch (NumberFormatException e){
System.out.println("Number format exception");
}
int val = (int) Long.parseLong(hex, 16);
System.out.println(val);
Out put:
ffffffe7
Number format exception
-25