/**
* 将十进制数转为任意进制
*
* @param num 十进制数
* @param base 目标进制
* @return
*/
public static 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 static 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);
}