十六进制转十进制(Java)
目录
一、什么是十六进制和十进制
1.十进制
一个以10为基数的数系,现实生活中接触到的数字就是十进制,锋十进一,十进位位值制记数法包括十进位和位值制两条原则,"十进"即满十进一;"位值"则是同一个数位在不同的位置上所表示的数值也就不同,如三位数"111",右边的"1"在个位上表示1个一,中间的"1"在十位上就表示1个十,左边的"1"在百位上则表示1个百。
2.十六进制
有16个基数:0 ~ 9,A(10),B(11),C(12),D(13),E(14),F(15) ,逢十六进一.从0数到1、2、3…A、B…F,数到F时(也就是第16个数时)进一是10,跟着数11、12、13…18、19、1A、1B…这样数下去。
二、转换方法(思路)
从最低位(右边)开始,将每个位上的数提取出来,乘以 16 的(位数-1)次方,然后求和。
(十进制默认不用写10#)
三、代码编写
- 先将A(10)、B(11)、C(12)、D(13)、E(14)、F(15)放入HashMap中。
- 循环判断数字部分和字母部分,然后对字母部分判断找出hashmap中对应的value值,最终进行类加得出结果。
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
/**
* 十六进制转十进制
* 0、1、2、3、4、5、6、7、8、9、A(10)、B(11)、C(12)、D(13)、E(14)、F(15)
*/
public class HexToDec {
public static void main(String[] args) {
int dec = 0;
Scanner sc = new Scanner(System.in);
String hex = sc.nextLine();
//先将A(10)、B(11)、C(12)、D(13)、E(14)、F(15)放入HashMap中
String[] overTen = {"A", "B", "C", "D", "E", "F"};
HashMap<String, Integer> hashMap = new HashMap<>();
for (int i = 0; i < 6; i++) {
hashMap.put(overTen[i], i + 10);
}
//取出hashMap中键的集合
Set<String> keySet = hashMap.keySet();
//循环判断
for (int i = 0; i < hex.length(); i++) {
//判断数字部分
if (hex.charAt(i) >= 48 && hex.charAt(i) <= 57) {
dec += (hex.charAt(i) - 48) * Math.pow(16, hex.length() - 1 - i);
} else {
//判断字母部分
for (String s : keySet) { //对键的集合进行遍历
if ((hex.charAt(i) + "").equals(s)) { //判断找出相匹配的键
Integer value = hashMap.get(s); //根据键找出相对应的值
dec += value * Math.pow(16, hex.length() - 1 - i); //类加求和
}
}
}
}
System.out.println(hex + "转换为十进制的结果为:" + dec);
}
}
版权声明:本文为weixin_55166132原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。