对于大于9 的数据而言,其16进制的表现形式是从A-F,因此需要Map集合以键值对的形式对数据进行一一映射,以方便进行获取不同的进制的相互转化。在该代码的实现过程中,主要是利用java.util.HashMap包,以及lang包下的String类的方法,charAt(),获得指定索引下的字符,并将其+"",的方式转化为字符串,以利用StringBuilder对字符串的索引值为0开始向前插入。
具体的的代码如下:
import java.util.HashMap;
public class IntegerToDecimal {
//定义一个MAP集合
private static final HashMap<Integer , String> HEXMAP = new HashMap<Integer, String>();
private static final HashMap<String , Integer> TENMAP = new HashMap<String, Integer>();
static {
HEXMAP.put(10, "A");
HEXMAP.put(11, "B");
HEXMAP.put(12, "C");
HEXMAP.put(13, "D");
HEXMAP.put(14, "E");
HEXMAP.put(15, "F");
TENMAP.put("A", 10);
TENMAP.put("B", 11);
TENMAP.put("C", 12);
TENMAP.put("D", 13);
TENMAP.put("E", 14);
TENMAP.put("F", 15);
}
//实现整数转任意进制
public static String integerToDecimal(int number,int scale) {
StringBuilder stringBuilder = new StringBuilder();
int temp;
while(number!=0) {
temp = number%scale;
if(scale==16&&number>9) {
String string = HEXMAP.get(temp);
stringBuilder.insert(0, string);
}
else {
stringBuilder.insert(0, temp);
}
number = number/scale;
}
return stringBuilder.toString();
}
//实现任意进制转十进制
public static int changeToTen(String number,int scale) {
int temp = 0;
int pow =1;
int sum =0;
number = number.toUpperCase();
for(int i = number.length()-1;i>=0;i--) {
char ch = number.charAt(i);
if (ch>='A'&&ch<='F') {
temp = TENMAP.get(ch+"");
}
else {
temp = Integer.parseInt(ch+"");
}
sum+=temp*pow;
pow= pow*scale;
}
return sum;
}
public static void main(String[] args) {
String string = integerToDecimal(12, 7);
System.out.println(string);
int s = changeToTen("ea1",16);
System.out.println(s);
}
}