各种 10进制,16,12,32进制转换工具类
package com.giikin.ad.platform.util; import java.math.BigInteger; import java.util.Stack; public class ConvertBaseUtil { // 理论上支持62进制的转换, 当然可以自己添加一些其他符号来增加进制数 private static final String TARGET_STR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; private static final char[] chs = TARGET_STR.toCharArray(); private static final BigInteger INTEGER0 = new BigInteger("0"); /** * 10进制转任意进制 */ public static String numToRadix(String number, int radix) { if (radix < 0 || radix > TARGET_STR.length()) { radix = TARGET_STR.length(); } BigInteger bigNumber = new BigInteger(number); BigInteger bigRadix = new BigInteger(radix + ""); Stack<Character> stack = new Stack<>(); StringBuilder result = new StringBuilder(0); while (!bigNumber.equals(INTEGER0)) { stack.add(chs[bigNumber.remainder(bigRadix).intValue()]); bigNumber = bigNumber.divide(bigRadix); } for (; !stack.isEmpty(); ) { result.append(stack.pop()); } return result.length() == 0 ? "0" : result.toString(); } /** * 任意进制转10进制 */ public static String radixToNum(String number, int radix) { if (radix < 0 || radix > TARGET_STR.length()) { radix = TARGET_STR.length(); } if (radix == 10) { return number; } char ch[] = number.toCharArray(); int len = ch.length; BigInteger bigRadix = new BigInteger(radix + ""); BigInteger result = new BigInteger("0"); BigInteger base = new BigInteger("1"); for (int i = len - 1; i >= 0; i--) { BigInteger index = new BigInteger(TARGET_STR.indexOf(ch[i]) + ""); result = result.add(index.multiply(base)); base = base.multiply(bigRadix); } return result.toString(); } /** * 任意进制之间的互相转换, 先将任意进制转为10进制, 然后在转换为任意进制 */ public static String transRadix(String num, int fromRadix, int toRadix) { return numToRadix(radixToNum(num, fromRadix), toRadix); } // public static void main(String[] args) { // //将一个大到随意的数字转换为尽可能的短 // //res: 3laVtRb0zg2IOs3nqp // System.out.println(numToRadix("22577506", 36)); // // //将 1010 从 2进制 转换为 10进制 // //res: 10 // System.out.println(radixToNum("DFWWY", 36)); // System.out.println(radixToNum("dfwwy", 36)); // System.out.println(radixToNum("18ce54zk1wo", 36)); // // //将 1010 从 2进制 转换为 16进制 // //res: a // System.out.println(transRadix("1010", 2, 16)); // } }
使用 比如把36进制的 i4l2k 转变成10进制
System.out.println(ConvertBaseUtil.radixToNum(“i4l2k”,36));