• Java基础知识强化106:Java中 int 的各进制之间的转换


    1、二、八、十、十六进制之间的转换

     下面是示例代码,我们直接通过JDK工具库中的方法实现的,如下:

    public static Integer valueOf(String s, int radix)

    参数为:

      String s要解析的字符串

      int radix解析s字符串的进制

     1 package com.himi.radix;
     2 
     3 
     4 /**
     5  * Java中如何实现十进制到其他进制的转换
     6  * @author hebao
     7  *
     8  */
     9 public class IntegerToOther {
    10 
    11     public static void main(String[] args) {
    12         int n = 14;
    13         //十进制转成十六进制:
    14         String n0 = Integer.toHexString(n);
    15         System.out.println("0x"+n0.toUpperCase());    
    16         //十进制转成八进制
    17         String n1 = Integer.toOctalString(n);
    18         System.out.println(n1);
    19         //十进制转成二进制
    20         String n2 = Integer.toBinaryString(12);
    21         System.out.println(n2);
    22         
    23         //十六进制转成十进制
    24         String n3 = Integer.valueOf("FFFF",16).toString();
    25         System.out.println(n3);    
    26         //十六进制转成二进制
    27         String n4 = Integer.toBinaryString(Integer.valueOf("FFFF",16));
    28         System.out.println(n4);    
    29         //十六进制转成八进制
    30         String n5 = Integer.toOctalString(Integer.valueOf("FFFF",16));
    31         System.out.println(n5);
    32         
    33         
    34         //八进制转成十进制
    35         String n6 = Integer.valueOf("576",8).toString();
    36         System.out.println(n6);    
    37         //八进制转成二进制
    38         String n7 = Integer.toBinaryString(Integer.valueOf("23",8));
    39         System.out.println(n7);
    40         //八进制转成十六进制
    41         String n8 = Integer.toHexString(Integer.valueOf("23",8));
    42         System.out.println(n8);
    43         
    44         
    45         //二进制转十进制
    46         String n9  = Integer.valueOf("010110101010",2).toString();
    47         System.out.println(n9);    
    48         //二进制转八进制
    49         String n10 = Integer.toOctalString(Integer.parseInt("010110101010", 2));
    50         System.out.println(n10);    
    51         //二进制转十六进制
    52         String n11 = Integer.toHexString(Integer.parseInt("010110101010", 2)).toUpperCase();
    53         System.out.println("0x"+n11);
    54 
    55     }
    56 
    57 }

    程序运行效果,如下:

    2、十进制转任意进制 [2-16]     和    任意进制间转换[2-16]

     1 package com.himi.code3;
     2 
     3 import java.util.Stack;
     4 
     5 public class TestDemo4 {
     6 
     7     public static void main(String[] args) {
     8 
     9         
    10         System.out.println("==============十进制 转化为  任意进制[2-16]==============");
    11         System.out.println(transformation(255, 16));
    12         System.out.println(transformation(254, 16));
    13         System.out.println(transformation(1010, 9));
    14         System.out.println(transformation(1010, 8));
    15         System.out.println(transformation(255, 2));
    16         
    17         
    18         System.out.println("==============任意进制间相互转换[2-16]==============");
    19         System.out.println(baseNum("678", 16, 10));
    20         System.out.println(baseNum("678", 9, 10));
    21         System.out.println(baseNum("678", 9, 2));
    22     }
    23 
    24     /**
    25      * 十进制[正整数] 转 任意进制 (2 ~ 16)
    26      * 
    27      * @param num
    28      *            输入的十进制数
    29      * @param base
    30      *            要转换成的进制
    31      */
    32     public static String transformation(int num, int base) {
    33         if (base > 16) {
    34             throw new RuntimeException("进制数超出范围,base<=16");
    35         }
    36 
    37         if (num < 0) {
    38             throw new RuntimeException("输入数据不能小于0");
    39         }
    40 
    41         StringBuffer str = new StringBuffer("");
    42 
    43         String digths = "0123456789ABCDEF";
    44 
    45         Stack<Character> s = new Stack<Character>();
    46 
    47         while (num != 0) {
    48             s.push(digths.charAt(num % base));
    49             num /= base;
    50         }
    51 
    52         while (!s.isEmpty()) {
    53             str.append(s.pop());
    54         }
    55         return str.toString();
    56     }
    57 
    58     /**
    59      * 16内任意进制间转换
    60      * 
    61      * @param num
    62      *            输入的数据
    63      * @param srcBase
    64      *            输入数据的进制
    65      * @param destBase
    66      *            要转换成的进制
    67      * @return
    68      */
    69 
    70     public static String baseNum(String num, int srcBase, int destBase) {
    71 
    72         if (Integer.valueOf(num) < 0) {
    73             throw new RuntimeException("输入数据不能小于0");
    74         }
    75         
    76         if (srcBase == destBase) {
    77             return num;
    78         }
    79         
    80         String digths = "0123456789ABCDEF";
    81         char[] chars = num.toCharArray();
    82         int len = chars.length;
    83         
    84         if (destBase != 10) {// 目标进制不是十进制 先转化为十进制
    85             num = baseNum(num, srcBase, 10);
    86         } else {
    87             int n = 0;
    88             for (int i = len - 1; i >= 0; i--) {
    89                 n += digths.indexOf(chars[i]) * Math.pow(srcBase, len - i - 1);
    90             }
    91             return n + "";
    92         }
    93         return transformation(Integer.valueOf(num), destBase);
    94     }
    95 
    96 }

    运行结果如下:

     

  • 相关阅读:
    LINUX云计算40个相关问题
    sql
    补肾
    少吃食品
    抗癌食品
    爱情感言
    分布式事务的处理
    前端
    JAVA->Enum
    Sleuth+Zipkin+Log
  • 原文地址:https://www.cnblogs.com/hebao0514/p/5626319.html
Copyright © 2020-2023  润新知