十六进制转十进制(Java)


目录

一、什么是十六进制和十进制

1.十进制

2.十六进制

二、转换方法(思路)

三、代码编写


一、什么是十六进制和十进制

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 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>