【问题标题】:Convert hex string to integer将十六进制字符串转换为整数
【发布时间】:2014-12-15 00:50:55
【问题描述】:

您好,我想从十六进制字符串中获取精确的整数值。

我的问题是我有一个整数值-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); 

我收到错误“Invalid Int”

但是当我手动将其转换为整数值时

  int len =Integer.parseInt("E7",16); 

我得到的结果是 231。

那么谁能告诉我如何通过传递整个十六进制字符串来获得精确的整数??

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

【问题讨论】:

标签: java string hex


【解决方案1】:
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

【讨论】:

  • 感谢您的回复,但我已经做到了。但我不想再 -25 我想要整数值 231,它是十六进制字符串 E7 ...
  • @NehaShukla quetsion 不清楚。参考我的输出,然后让我们知道。
  • @NehaShukla y 仅考虑 E7 来自 ffffffe7
  • as Integer.toHexString(-25) 返回带有预添加 F 的十六进制字符串,我无法从结果中删除它
  • @NehaShukla 我还在想,-25hex representationffffffe7,在转换回int 时要考虑什么
【解决方案2】:

由于数字是负数,它会溢出。 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);

输出:

 ffffffe7
 Number format exception
 -25

【讨论】:

  • 感谢您的回复,但我已经做到了。但我不想再 -25 我想要整数值 231,它是十六进制字符串 E7 ...
猜你喜欢
  • 2015-11-29
  • 2017-08-12
  • 2013-12-07
  • 1970-01-01
相关资源
最近更新 更多