进制转换

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

 

posted @   余额一个亿  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示