十六进制char数组到十进制

时间:2017-12-03 12:26:43

标签: java arrays function hex decimal

我需要编写一个函数,它接受表示十六进制数的char数组,并将数字作为十进制整数返回 例如:7F作为基数16在数组中显示为['7', 'F']并返回127

我尝试过这样做,但有些东西不起作用:

public static int HexToDec(char arr[]) {

    int counter = arr.length - 1;
    int sum = 0;

    for (int i = 0; i < counter; i++) {
        sum = (int) (sum + (Math.pow(16, counter)) * i);
        counter--;
    }

    return sum;
}

2 个答案:

答案 0 :(得分:2)

也许这可以帮到你:

public int hexToDec(char arr[]) throws NumberFormatException {
    try {
        return Integer.parseInt(String.valueOf(arr), 16);
    } catch (NumberFormatException e) {
        throw new NumberFormatException("Error or parsing");
    }
}

输入

int result = hexToDec(new char[]{'7', 'F'});

输出

127

答案 1 :(得分:1)

此实施存在几个问题:

  • 由于counter已初始化为arr.length - 1,如果i从0变为< counter,则会错过最后一个值
  • 但事实上事情比这更糟糕,因为不仅i在每次迭代中递增,counter递减,所以实际上i只会达到数组的一半
  • 您根本不需要Math.pow,您可以通过迭代乘以16累积正确的总和
  • 最糟糕的是,函数根本没有使用arr中的值,因此您无法获得正确的结果

考虑这个选择:

public static int hexToDec(char[] arr) {
    int sum = 0;
    for (char c : arr) {
        int num;
        if ('0' <= c && c <= '9') {
            num = c - '0';
        } else if ('A' <= c && c <= 'F') {
            num = 10 + (c - 'A');
        } else {
            throw new IllegalArgumentException("Invalid character in input: " + c);
        }
        sum *= 16;
        sum += num;
    }

    return sum;
}
相关问题