首页 > 技术文章 > Java基础知识强化106:Java中 int 的各进制之间的转换

hebao0514 2016-06-29 11:44 原文

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 }

运行结果如下:

 

推荐阅读