/**
* 进制转换工具
* @author Mr.Huang
* @version 2019年11月27日
*/
public class HEXUtil {
private final static char[] HEX = new char[]{
'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F'
};//十六进制
// private final static char[] HEX = new char[]{
// '0','1','2','3','4','5','6','7',
// '8','9','A','B','C','D','E','F',
// 'G','H','I','J','K','L','M','N',
// 'O','P','Q','R','S','T','U','V',
// 'W','X','Y','Z','a','b','c','d',
// 'e','f','g','h','i','j','k','l',
// 'm','n','o','p','q','r','s','t',
// 'u','v','w','x','y','z'
// };//六十二进制
public static void main(String[] args) {
long currentTimeMillis = System.currentTimeMillis();
String hex2 = hex(currentTimeMillis);
System.out.println("====【"+HEX.length+"进制】====");
System.out.println("原始数据 = "+currentTimeMillis);
System.out.println("进制转换 = " + hex2);//
System.out.println("进制还原 = "+unHex(hex2));
System.out.println("内容验证 = " +(unHex(hex2) == currentTimeMillis));
}
/**
* 进制转换
* @param num
* @return
*/
public static String hex(long num){
char[] chars = new char[getLength(num)];
long cNum = num;
for (int i = chars.length-1; i >= 0; i--) {
int c = (int) (cNum%HEX.length);//余
chars[i] = HEX[c];
cNum = cNum/HEX.length;//商
}
return String.valueOf(chars);
}
/**
* 进制还原
* @param hex
* @return
*/
public static long unHex(String hex){
char[] chars = hex.toCharArray();
long last = getValue(chars[chars.length-1]);
long value = 0;
int x = 1;
for (int i = chars.length-2; i >=0 ; i--) {
double pow = Math.pow(HEX.length,x++)*getValue(chars[i]);
value = value + (long)pow;
}
return value+last;
}
/**
* 解析进制对应值
* @param c
* @return
*/
private static int getValue(char c){
for (int i = 0; i < HEX.length; i++) {
if (HEX[i] == c) {
return i;
}
}
return -1;
}
/**
* 计算进制长度
* @param num
* @return
*/
private static int getLength(long num){
long cNum = num;
int len = 1;
cNum = cNum/HEX.length;//商
while (cNum/HEX.length > 0) {
len ++;
cNum = cNum/HEX.length;//商
}
if (cNum>0) {
len++;
}
return len;
}
}