10进制转62进制 java,算法:一种高效的「十进制与62进制互相转换」的算法
/*** 「十进制与62进制互相转换」的算法* **ASCII可显示字符对应十进制数字范围***0-948~57***A-Z65~90***a-z97~122** 在本工具中,约定代表62进制的62位序列为以下格式:0-9A-Za-z** @aut...
/**
* 「十进制与62进制互相转换」的算法
*
*
*
ASCII可显示字符对应十进制数字范围*
*
*
0-948~57*
*
*
A-Z65~90*
*
*
a-z97~122*
*
在本工具中,约定代表62进制的62位序列为以下格式:0-9A-Za-z
*
* @author zifangsky
* @date 2020/11/13
* @since 1.0.0
*/
public class ConversionUtils {
public static void main(String[] args) {
long time = 4304533664563210240L;
String sixtyTwoStr = decimalToSixtyTwo(time);
System.out.println(sixtyTwoStr);
long origin = sixtyTwoToDecimal(sixtyTwoStr);
System.out.println(origin);
//断言转换回来后是否跟原来一样
assert time == origin;
}
/**
* 十进制转62进制(仅限正整数)
* @author zifangsky
* @date 2020/11/13 12:08
* @since 1.0.0
* @param num 十进制数字
* @return java.lang.String
*/
public static String decimalToSixtyTwo(long num){
if(num <= 0){
return "0";
}
StringBuilder sb = new StringBuilder();
//余数
long remainder;
while (num > 0){
remainder = num % 62;
//0-9
if(remainder < 10){
sb.append((char)('0' + remainder));
}
//A-Z
else if(remainder < 36){
sb.append((char)('A' + remainder - 10));
}
//a-z
else{
sb.append((char)('a' + remainder - 36));
}
num = num / 62;
}
//因为在上面的循环过程中,后一次循环本应是计算出来的高位字符,但是却被我们放在字符串的最后面,因此最终结果需要再反转一次
return sb.reverse().toString();
}
/**
* 62进制转十进制
* @author zifangsky
* @date 2020/11/13 12:27
* @since 1.0.0
* @param numStr 62进制字符串
* @return java.lang.String
*/
public static long sixtyTwoToDecimal(String numStr){
//最后转换完成之后的十进制数字
long num = 0;
//字符串中的具体某一个字符
int idx;
for (int i = 0; i < numStr.length(); i++) {
idx = numStr.charAt(numStr.length() - 1 - i);
if(idx >= 'a'){
//idx = 'a' + remainder - 36,于是可以推导出:remainder = idx + 36 - 'a'
//num = remainder * 62^i
num += (idx + 36 - 'a') * Math.pow(62, i);
}
else if(idx >= 'A'){
//idx = 'A' + remainder - 10,于是可以推导出:remainder = idx + 10 - 'A'
num += (idx + 10 - 'A') * Math.pow(62, i);
}else{
//idx = '0' + remainder,于是可以推导出:remainder = idx - '0'
num += (idx - '0') * Math.pow(62, i);
}
}
return num;
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)