我需要编写一个函数,它接受表示十六进制数的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;
}
答案 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;
}