所以我正在尝试使用hashmap构建一个十六进制到二进制转换的基本程序。 无论出于何种原因,低于'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'));
我正在制作一个工作,但我真的很好奇为什么会这样。
答案 0 :(得分:0)
因为在以下行中,您使用的是Octal表示,因为您从0开始。在base-8 Octal represantation中,0101
代表65,因为您将Character 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