первое сообщение здесь. У меня есть задание преобразовать из шестнадцатеричного в десятичное, в том числе и другие преобразования, но у меня есть одна проблема ...Проблема с шестнадцатеричным преобразованием в десятичную деление
Так что шестнадцатеричные значения, которые мне нужно преобразовать, - 12345678, 2A3DF8A7, 00FF00FF. 00FF00FF отлично работает, это числовые значения, которые дают мне проблемы.
Я знаю, что вы должны умножить цифру на 16^n, но по какой-то причине я получаю значения, которые слишком высоки, хотя я думаю, что делаю это правильно. Очевидно, нет, потому что он не работает. Помощь будет принята с благодарностью!
Мой код изменился в течение последнего часа, возившись с ним, но это последняя «еще», теперь проблема.
public void toDec()
{
dec = 0;
for (int j = 0, i = 7; j < hex.length(); j++){
if (hex.charAt(j) == 'A') {
dec += (10 * (int)Math.pow(16, i));
}
else if (hex.charAt(j) == 'B') {
dec += (11 * (int)Math.pow(16, i));
}
else if (hex.charAt(j) == 'C') {
dec += (12 * (int)Math.pow(16, i));
}
else if (hex.charAt(j) == 'D') {
dec += (13 * (int)Math.pow(16, i));
}
else if (hex.charAt(j) == 'E') {
dec += (14 * (int)Math.pow(16, i));
}
else if (hex.charAt(j) == 'F') {
dec += (15 * (int)Math.pow(16, i));
}
else if (hex.charAt(j) == '0') {
dec = dec;
}
else {
dec += ((int)hex.charAt(j)) * ((int)Math.pow(16, i));
}
i--;
}
}
Просто замечание. Вы можете избавиться от переменной 'i', заменив ее на' hex.length() - 1 - j'. Делает это также работать с шестнадцатеричными значениями, которые длиннее или короче 8 цифр ... –
Если это всего лишь 8 цифр, 'Math.pow (16, i)' может быть просто '1 << i * 4', так как 16 сила 2, смещение бит. –