有时我们在使用十进制的时候,会有长度过长情况。如加密或传输的过程中,日期数据20141230 使用进制转换可以少好几位长度。
因此写了一个十进制与任意自定义进制转换的工具类,可以将十进制转换成任意进制,也可以让任意进制转换回十进制。
希望大家也能用得上。
public class TEST {
public static final String CHS_STR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
//0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("value:" + numToStr(20141230) );
System.out.println("num:" + strToInt("WU"));
String ss = "12345678";
String str ="";
for(char c : ss.toCharArray()){
str += numToStr( (int)c );
}
System.out.println("str:"+str);
}
/**
* @param i
* @return
*/
public static String numToStr(long _int) {
if (_int < 0) {
return null;
}
int len = CHS_STR.length();
char[] chs = CHS_STR.toCharArray();
int n = -1;
long intVal = _int;
StringBuffer val = new StringBuffer();
do {
if (intVal < len) {
n = (int) intVal;
} else {
n = (int) (intVal % len);
}
intVal = (int) Math.floor(intVal / len);
val.append(chs[n]);
} while (intVal > 0);
val = val.reverse();
return val.toString();
}
public static long strToInt(String str) {
int len = CHS_STR.length();
char[] chs = CHS_STR.toCharArray();
StringBuffer sb = new StringBuffer(str.trim());
char[] strs = sb.reverse().toString().toCharArray();
long num = 0;
for (int i = 0; i < strs.length; i++) {
int ind = 0;
for (char c : chs) {
if (strs[i] == c) {
break;
}
ind++;
}
num += ind * (int) Math.pow(len, i);
}
return num;
}
}