牛客网-进制转换-MY
代码
public static int conversion2(String s){
Map<Character, Integer> map = new HashMap<>();
map.put('0', 0);
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);
map.put('a', 10);
map.put('b', 11);
map.put('c', 12);
map.put('d', 13);
map.put('e', 14);
map.put('f', 15);
char[] chars = s.substring(2).toCharArray();
return (int) IntStream.range(0,chars.length)
// 进制计算是从16*0开始的,然后16*1...,故需要再-1
.mapToDouble(i->map.get(chars[i]) * Math.pow(16,chars.length-i-1))
.sum();
}
总结
十六进制转十例子:0x6c=6*16**1+12*16**0=108