十六进制工具类

十六进制工具类

一、十进制转十六进制

代码:

//将整数转换成十六进制的字符串
	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);

总结

  1. 十六进制转为十进制,需要余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);
			}
posted @ 2021-03-16 21:07  记录学习Blog  阅读(164)  评论(0编辑  收藏  举报