1)十六转十进制和二进制
首先十六进制转低进制,可以想象成十六进制数是一个需要大的容器才能存放的”大米”,现在要把大米分到低进制数的小容器,这个时候就会发现一个问题,放不下,怎么办?那就计算一下需要几个这样的小容器。于是转化的时候就需要乘以16的加权数(加权数是指从末尾向首部依次为0,1,2......),第一个容器需要多少大米呢?从尾部依次向首部的话:就需要
*对应的尾部的数字,第二第三等等容器需要多少大米依次计算,这样就计算出了转化后的大米有多少并且每一个小容器需要放多少大米。最后将这些小容器的大米全部加起来就算出了转化后的全部大米,也就完成了进制的转化。
十六进制转化二进制的时候,最简单的方法就是将十六进制的每一位转化成对应的4位的二进制数。(或者是先转化为十进制再转化为二进制)
0x20转化十进制是0*
+2*
=32
0x20转化为二进制是:00100000
/**
* 16进制转化2进制,先去掉前面的0x标志,再把每一位16进制数转化为对应的4位2进制数
* 比如16进制的 1 的2进制是 0001
* 在利用Interger.parseInt的方法中先转化为10进制再转化为16进制会出现高位丢失问题,需要判断高位丢失并补0处理
* @param str
* @return
*/
public static int conver16to2(String str){
String s16 = str.replace(" ", "");
int s10 = Integer.parseInt(s16,16);
System.out.println("16-10:"+s10);
String s2 = Integer.toBinaryString(s10);
int num = 8 - s2.length();
StringBuilder stringBuilder = new StringBuilder();
if (num != 0){
for (int i = 0;i < num;i++){
stringBuilder.append('0');
}
}
System.out.println("16-2:"+stringBuilder.append(s2));
String substring = stringBuilder.substring(0, 3);
int res = Integer.parseInt("2-10"+substring);
return res;
}
2)十进制转十六和二进制
其次低进制转化十六进制可以想象成分糖果,我有一箱十进制数糖果,此时有x个组,每个组16人,那么一个组分多少糖果呢?这个时候其实按照数学思维就可以解决这个问题。首先x的值表示的是商的个数,那么一个组分多少个糖果就是余数了。这样的话就可以通过短除法直接求出x和余数,那么余数的倒排就是结果,也就完成了进制的转化了。
十进制转化二进制同样符合上面的规律。
/**
* 10进制转化16进制和二进制都需要先将传进来的字符串处理成数字在进行转化。
* @param str
* @return
*/
public static int conver10to16(String str){
String s10 = str.replace(" ", "");
int integer10 = Integer.parseInt(s10);
String s16 = Integer.toHexString(integer10);
System.out.println("10-16:"+s16);
String s2 = Integer.toBinaryString(integer10);
StringBuilder stringBuilder = new StringBuilder();
int num = 8 - s2.length();
if (num != 0){
for (int i = 0;i < num;i++){
stringBuilder.append('0');
}
}
System.out.println("10-2:"+stringBuilder.append(s2));
return integer10;
}
3)二进制转十六和十进制
二进制转十六进制最简单的方法就是从尾部向首部依次以4个为一组划分小组,然后将划分的小组依次转化为对应的十六进制数,其中注意A-10、B-11、C-12、D-13、E-14、F-15的转化。
二进制转化十进制符合上面的十六进制转化低进制的原理,其中不一样的是二进制是2乘以加权数,最后将结果全部相加即转化完成。
/**
* 2进制转化为16进制需要先转化为10进制再转化为16进制
* @param str
* @return
*/
public int conver2to16(String str){
String s2 = str.replace(" ", "");
int s10 = Integer.parseInt(s2,2);
System.out.println("2-10:"+s10);
String s16 = Integer.toHexString(s10);
System.out.println("2-16:"+s16);
return s10;
}