Итак, я пытаюсь создать базовую программу для преобразования шестнадцатеричного числа в двоичное, просто используя хэш-карту. По какой-то причине каждый ключ ниже «8» выводит значение, не являющееся двоичным. Пример: 5 должен выводить 0101, но вместо этого выводит 65. Ниже в основном хеш.
map.put('1', 0001);
map.put('2', 0010);
map.put('3', 0011);
map.put('4', 0100);
map.put('5', 0101);
map.put('6', 0110);
map.put('7', 0111);
map.put('8', 1000);
map.put('9', 1001);
map.put('A', 1010);
map.put('B', 1011);
map.put('C', 1100);
map.put('D', 1101);
map.put('E', 1110);
map.put('F', 1111);
System.out.println(map.get('5'));
Я работаю над этим, но мне действительно любопытно, почему это происходит.
Значения, вероятно, должны быть строками, например, «0101».
Карты должны отображать символы в строки.
Ваш map бесполезен. System.out.println(Integer.toBinaryString(Integer.parseInt("F", 16)));, а другой путь - System.out.println(Integer.toHexString(Integer.parseInt("1111", 2)));
@dasblinkenlight хорошо, круто. Я все равно собирался сделать все на струнах. Спасибо чувак. Я новичок в этом, поэтому все еще изучаю простые вещи.
0101 в восьмеричной системе счисления - это 65.
@ Эллиотт круто, спасибо
Ваша IDE, вероятно, должна выделять числа, начинающиеся с 0 (в IntelliJ они кажутся коричневыми) - такие числа интерпретируются как основание 8, что почти никогда не является тем, что вы хотите.
Было бы лучше, если бы вы поместили инициализацию карты в свой пример кода. С этим достойным образцом кода никто не сможет легко сосредоточиться на решении вашей проблемы. Четкий демонстрационный код всегда должен сопровождаться хорошей информацией или частью кода вашей проблемы.




Поскольку в следующей строке вы используете восьмеричное представление, потому что вы начинаете с 0. В восьмеричном представлении base-8 0101 обозначает 65, и поскольку вы сопоставляете символ 5 с этим значением, целочисленное значение восьмеричного 0101 вычислено, как показано ниже;
1 * 8 ^ 2 + 0 * 8 ^ 1 * + 1 * 8 ^ 0 = 64 + 0 = 1 = 65
Вам нужно сопоставить значения в целочисленном формате, нет необходимости использовать восьмеричное или двоичное. Значения не меняются, но изменяется представление.
package com.levo.so.maprelated;
import java.util.HashMap;
import java.util.Map;
public class HexMapFailDemo {
public static void main(String[] args) {
Map<Character, Integer> map = new HashMap<>();
map.put('1', 0001);
map.put('2', 0010);
map.put('3', 0011);
map.put('4', 0100);
map.put('5', 0101);
map.put('6', 0110);
map.put('7', 0111);
map.put('8', 1000);
map.put('9', 1001);
map.put('A', 1010);
map.put('B', 1011);
map.put('C', 1100);
map.put('D', 1101);
map.put('E', 1110);
map.put('F', 1111);
System.out.println(map.get('5'));
System.out.println("Octal 101 = 8^2 + 1 = " + (8*8 + 1));
}
}
65
Octal 101 = 8^2 + 1 = 65
package com.levo.so.maprelated;
import java.util.HashMap;
import java.util.Map;
public class HexMapSuccessDemo {
public static void main(String[] args) {
Map<Character, Integer> map = new HashMap<>();
map.put('1', 1);
map.put('2', 2);
map.put('3', 3);
map.put('4', 4);
map.put('5', 5);
map.put('6', 6);
map.put('7', 7);
map.put('8', 8);
map.put('9', 9);
map.put('A', 10);
map.put('B', 11);
map.put('C', 12);
map.put('D', 13);
map.put('E', 14);
map.put('F', 15);
System.out.println(map.get('5'));
}
}
5
Опечатка; вам не хватает
0xперед числами, чтобы не делать их восьмеричными, как сейчас.