十进制与十六进制的相互转换

在面对十进制与十六进制的相互转换的问题时,可以借鉴十进制与二进制之间相互转换的思想。

以下是十进制与二进制之间转换的图解:

基于以上的思想,想出了十进制与十六进制的相互转换的类似方法:

十进制转十六进制:
/*
 * 十进制转十六进制
 * */
public class Test5 {
    public static void main(String[] args) {
        DtoH(195);
    }

    /*
     * 十进制转十六进制方法
     * 
     * @param x 待转换的十进制数
     */
    public static void DtoH(int x) {
        // 存放十六进制的十六个数
        String[] str = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
        // 临时存放所有余数
        LinkedList<Integer> linkedList = new LinkedList<Integer>();
        // m:临时存放每次计算的余数
        int m = 0;
        while (x != 0) {
            m = x % 16;// m存余数
            linkedList.push(m);
            x = x / 16;
        }
        // reuslt:存放结果
        String reuslt = "";
        while (linkedList.size() != 0) {
            Integer popInteger = linkedList.pop();
            reuslt = reuslt + str[popInteger - 1];
        }
        System.out.println(reuslt);
    }
}

---------> 输出:
C3

 

十六进制转十进制:
import java.util.HashMap;
import java.util.Scanner;

import org.junit.Test;

public class Test6 {
    public static void main(String[] args) {
        HtoD("C5");
    }

    /*
     * 十六进制转十进制
     * 
     * @param str 待转换的十六进制数
     */
    public static void HtoD(String str) {
        // map:搭建十六进制中A-F对应的数值
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("A", 10);
        map.put("B", 11);
        map.put("C", 12);
        map.put("D", 13);
        map.put("E", 14);
        map.put("F", 15);
        // 获取待转换的十六进制的长度
        int length = str.length();// 输入的长度
        // 将待转换的十六进制转换成数组
        char[] cs = str.toCharArray();
        // result:用于存结果
        int result = 0;
        // 遍历数组
        for (int i = 0; i < str.length(); i++) {
            //取出每一个字符
            char x = cs[i];
            if (x >= 65 && x <= 70) {//若为A--F
                int r = map.get("" + x);
                result += r * Math.pow(16, length - 1);
            } else {
                result += (x - '0') * Math.pow(16, length - 1);
            }
            length--;
        }
        System.out.println(result);
    }

}
--------->
输出:197

 

【拓展】JAVA中已经有实现十进制与十六进制互相转换的方法:

十进制转十六进制:
以下是java.lang.Integer.toHexString()方法的声明:
public static String toHexString(int i)   返回为无符号整数基数为16的整数参数的字符串表示形式。

 如:

System.out.println(Integer.toHexString(233));
---------->e9
 

十六进制转十进制:
Integer.parseInt(String s,int radix) 就是求“int radix”进制数“String s”的十进制数是多少。 

  如:

System.out.println(Integer.parseInt("1010", 2));
---------->意思就是:输出2进制数1010在十进制下的数.  输出:10

我们平时用到Integer.parseInt("123");其实默认是调用了int i =Integer.parseInt("123",10);  
 

 

posted @ 2018-11-28 14:04  Yotu_Wang  阅读(1638)  评论(0编辑  收藏  举报