十六进制工具类
十六进制工具类
一、十进制转十六进制
代码:
//将整数转换成十六进制的字符串
public static String decimalTohex(int decimal) {
String result = "";
int x = decimal;
while(x!=0) {
//余16
int mod = x%16;
if(mod>9) {
result = (char)('A' + (mod-10)) + result;
}else {
result = mod + result;
}
// 使其继续能够迭代下去
x = x/16;
}
// 除16取余 17=》11
// 17/16 得1余1
// 1/16 得0余1
return result;
}
或者直接用java的内部类Integer.toString(x,radix);
总结
- 十六进制转为十进制,需要余16得到这一位的进制,然后除16得到下一位上的数字。
x = x/16;
使其继续能够迭代下去。
//余16
int mod = x%16;
余十六的得到这一位置上的模
二、十进制转十六进制
代码:
//将十六进制数转成十进制数
public static int hexToDecimal(String hex) {
int res = 0;
for (int i = hex.length()-1; i >=0 ; i--) {
int x;
if((hex.charAt(i)>=65&&hex.charAt(i)<=90)) {
x = (int)(hex.charAt(i)-'A')+10;
res+= x*Math.pow(16, hex.length() -1-i);//hex.length() -i -1很好推,比如abc刚开始取第一个字符下标为0(i = 0),
// 但是它的权值是pow(3-1-0)
}else if((hex.charAt(i)>=97&&hex.charAt(i)<=122)) {
x = (int)(hex.charAt(i)-'a')+10;
res+= x*Math.pow(16, hex.length() -1-i);
}
else {
x = (int)(hex.charAt(i)-'0');
res+=x*Math.pow(16, hex.length() -1-i);;
}
}
return res;
}
总结:
String [] arr = hex.split("");
这条语句可以将字符串hex差分为一个个的字符,放到数组中。
或者
char [] ch = hex.toCharArray();
2.charAt的时候先取这个十六进制的第一位,所以特别注意hex.length() -i -1很好推,比如abc刚开始取第一个字符下标为0(i = 0),但是它的权值是pow(3-1-0)
res+= x*Math.pow(16, hex.length() -1-i);
3.另外区分一下大写和小写字母算出来的值不同,要分情况写
//大写字母
if((hex.charAt(i)>=65&&hex.charAt(i)<=90)) {
x = (int)(hex.charAt(i)-'A')+10;
res+= x*Math.pow(16, hex.length() -1-i);//hex.length() -i -1很好推,比如abc刚开始取第一个字符下标为0(i = 0),
// 但是它的权值是pow(3-1-0)
}
//小写字母
else if((hex.charAt(i)>=97&&hex.charAt(i)<=122)) {
x = (int)(hex.charAt(i)-'a')+10;
res+= x*Math.pow(16, hex.length() -1-i);
}