将十六进制字符串转换为整

时间:2014-10-20 05:07:34

标签: java string hex

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。

所以任何人都可以告诉我如何通过传递整个十六进制字符串来获得完整的整数?

因为我的十六进制字符串是动态的所以我无法解决它。

2 个答案:

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