/**
 * 将十进制数转为任意进制
 *
 * @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);
}