zoukankan      html  css  js  c++  java
  • 十进制与十六进制的相互转换

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

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

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

    十进制转十六进制:
    /*
     * 十进制转十六进制
     * */
    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);  
     
  • 相关阅读:
    Java实现 LeetCode 209 长度最小的子数组
    Java实现 蓝桥杯 图书排列(全排列)
    Java实现 蓝桥杯 图书排列(全排列)
    Java实现 蓝桥杯 图书排列(全排列)
    C++11 FAQ中文版--转
    rtsp交互命令简介及过程参数描述
    PS流格式
    经典系统windows xp sp3官方原版下载(附XP序列号)
    Darwin Streaming Server 简介
    jrtplib跨网络通讯NAT穿透问题解决方法
  • 原文地址:https://www.cnblogs.com/tubeWang/p/10031780.html
Copyright © 2011-2022 走看看