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

2022-09-01 18:03:26

我写了一些代码来将我的十六进制显示字符串转换为十进制整数。但是,当输入类似于100a625b(带有字母的东西)时,我得到了这样的错误:

java.lang.NumberFormatException: 对于输入字符串:“ 100a” at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source)

如何将带字母的字符串转换为十进制整数?

if(display.getText() != null)
{
    if(display.getText().contains("a") || display.getText().contains("b") ||
       display.getText().contains("c") || display.getText().contains("d") ||
       display.getText().contains("e") || display.getText().contains("f"))
    {
        temp1 = Integer.parseInt(display.getText(), 16);
        temp1 = (double) temp1;
    }
    else
    {
        temp1 = Double.parseDouble(String.valueOf(display.getText()));
    }
}

答案 1

看起来字符串中有一个额外的(前导)空格字符(“100a”)。您可以使用 来删除前导空格和尾随空格:trim()

temp1 = Integer.parseInt(display.getText().trim(), 16);

或者,如果您认为空间的存在意味着存在其他问题,则必须自己研究它,因为我们没有您的其余代码。


答案 2
public static int hex2decimal(String s) {
    String digits = "0123456789ABCDEF";
    s = s.toUpperCase();
    int val = 0;
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        int d = digits.indexOf(c);
        val = 16*val + d;
    }
    return val;
}

这是我在互联网上找到的最有效和最优雅的解决方案。这里提供的其他一些解决方案并不总是对我有用。