进制转换在实际的编程中会经常使用,尤其是二进制的数。
先看一个可以在16进制内任意转换的算法,实际就是:
(1)10进制转为其它进制,使用辗转相除,逆序取余
(2)其它进制转为十进制,则按权展开
代码:
- public class Base {
- /**
- * 将数转为任意进制
- * @param num
- * @param base
- * @return
- */
- public String baseString(int num,int base){
- if(base > 16){
- throw new RuntimeException("进制数超出范围,base<=16");
- }
- StringBuffer str = new StringBuffer("");
- String digths = "0123456789ABCDEF";
- Stack<Character> s = new Stack<Character>();
- while(num != 0){
- s.push(digths.charAt(num%base));
- num/=base;
- }
- while(!s.isEmpty()){
- str.append(s.pop());
- }
- return str.toString();
- }
- /**
- * 16进制内任意进制转换
- * @param num
- * @param srcBase
- * @param destBase
- * @return
- */
- public String baseNum(String num,int srcBase,int destBase){
- if(srcBase == destBase){
- return num;
- }
- String digths = "0123456789ABCDEF";
- char[] chars = num.toCharArray();
- int len = chars.length;
- if(destBase != 10){//目标进制不是十进制 先转化为十进制
- num = baseNum(num,srcBase,10);
- }else{
- int n = 0;
- for(int i = len - 1; i >=0; i--){
- n+=digths.indexOf(chars[i])*Math.pow(srcBase, len - i - 1);
- }
- return n + "";
- }
- return baseString(Integer.valueOf(num),destBase);
- }
- }