public String get16Jz(int n) {
int d = n / 16;
if ( d < 16) {
return getExp(n / 16) + "" + getExp(n % 16);
}
int left = n % 16;
return get16Jz(d) + "" + getExp(left);
}
public String get16BigDecimal(BigDecimal src) {
BigDecimal divide = src.divideAndRemainder(new BigDecimal("16"))[0];
BigDecimal baseData = new BigDecimal("16");
if (divide.compareTo(baseData) < 0) {
int intValue = src.intValue();
int leftlast = intValue % 16;
//System.out.println("divide="+divide+"("+getExp(divide.intValue())+")小于16,leftlast="+leftlast+"("+getExp(leftlast)+")");
return getExp(intValue / 16) + "" + getExp(leftlast);
}
int left = src.divideAndRemainder(BigDecimal.valueOf(16))[1].intValue();
String leftChar = getExp(left);
System.out.println(src+":"+divide+":"+left+"("+leftChar+")");
return get16BigDecimal(divide) + leftChar;
}
public static BigDecimal sixteenToten(String str16){
if(str16 == null || "".equals(str16)){
return null;
}
int length = str16.length();
int j = 0;
BigDecimal baseDecimal = new BigDecimal(0);
for(int i = length-1; i >= 0 ;i--){
//获取本位的字母
char charAt = str16.charAt(i);
//把十六进制字符转换为十进制
Integer tenNum = getTenNum(charAt);
//算出本位的值即先算出16的位数次方
double thisWeiValue = Math.pow(16, j++);
BigDecimal thisbigDecimal = new BigDecimal(thisWeiValue);
thisbigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
//再乘以该位的十进制值
String thisValueStr = new BigDecimal(tenNum).multiply(thisbigDecimal).toString();
BigDecimal thisLastValue = new BigDecimal(thisValueStr);
//把该位的值加到总值上
baseDecimal = baseDecimal.add(thisLastValue);
//System.out.println("第"+i+"位:"+charAt+"("+tenNum+"):"+thisLastValue+"("+tenNum+"x"+thisbigDecimal+"):"+baseDecimal);
}
return baseDecimal;
}
public static Integer getTenNum(char c){
String valueOf = String.valueOf(c);
if(StringUtils.isNumeric(valueOf)){
return Integer.parseInt(valueOf);
}
switch (valueOf) {
case "a":
return 10;
case "b":
return 11;
case "c":
return 12;
case "d":
return 13;
case "e":
return 14;
case "f":
return 15;
}
return null;
}
public String getExp(int a) {
if (a < 10) {
return a + "";
}
if (a >= 10) {
switch (a) {
case 10:
return "a";
case 11:
return "b";
case 12:
return "c";
case 13:
return "d";
case 14:
return "e";
case 15:
return "f";
}
}
return a + "";
}
十六进制与十进制转换
最新推荐文章于 2024-05-18 16:42:38 发布