//用来存放词典
public static final Map<Integer, String> map=new HashMap<Integer, String>();
//18进制数据
public static StringBuffer sb=new StringBuffer("");
//用来存放18进制数据的每一位
public static List<Integer> list=new ArrayList<Integer>();
//自动加载词典
static{
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
map.put(16, "G");
map.put(17, "H");
}
接下来就是核心的转换代码
/**将十进制数字转十八进制数字。
*/
private static void get18(int num){
while(num>0){
int yu=num%18;
num/=18;
//把余数存入list
list.add(yu);
}
}
此段代码的主要思路就是将十进制数对18取整(即除以18)后循环取余,最后将余数保存下来即可。
接下来是对余数的后续处理:
//生成18进制数字
private static void to18(){
for (int i = list.size()-1; i >=0; i--) {
if(map.containsKey(list.get(i))){
sb.append(map.get(list.get(i)));
}
else{
sb.append(list.get(i));
}
}
}
将list中的余数与map中的匹配,若大于10的则用英文字母A-H表示,否则就用数字0-9表示。
这里list下标从最大开始递减是因为要将得到的余数进行倒序排列才能得到相应的18进制数。
下面是相应的测试代码:
//测试
public static void main(String[] args) {
get18(5400);
to18();
//System.out.println(list);
System.out.println(sb);
}
结果是GC0.
其实只要理解了十进制转换的思想,十进制转换任何进制都是相应的套路。