自定义进制规则的转换思路

项目碰到一个需求,流水号自增,但是自增不是10进制。是任意进制,并且规则可以任意定义,过滤一些不用的字符。比如说用6进制 012345,用abcdef。

处理思路:正常存储还是用正常10进制处理。单独记录下需要的规则abcdef。然后调用下面的switchHEX方法即可

Integer自带2,8,16进制的转换,进入Integer或者BigInteger类看看就行。

 	public static void main(String[] args) {
        System.out.println(switchHEX(100,6,"abcdef"));
    }
    
	/**
     * 常规的进制转换,非自定义的
     * number 要转换的数
     * from 原数的进制
     * to 要转换成的进制
     * 注意进制是2进制到36之间。
     */
    private static String changeHEX(String number, int from, int to) {
        return new BigInteger(number, from).toString(to);
    }

    /**
     * 自定义的 进制转换
     * value 10进制的数据
     * base 要转换的进制
     * valueEnum 自定义的进制规则
     * switchHEX(100,2,"01")
     */
    private static String switchHEX(int value, int base, String valueEnum) {
        StringBuilder sb = new StringBuilder();
        String digits = valueEnum.substring(0, base);
        Stack<Character> s = new Stack<>();
        while (value != 0) {
            s.push(digits.charAt(value % base));
            value /= base;
        }
        while (!s.isEmpty()) {
            sb.append(s.pop());
        }
        return sb.toString();
    }
   

效果:
在这里插入图片描述
通过这个方法,就可以任意规则的进制处理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值