/**

* 「十进制与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;

}

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐