十六进制与十进制转换

public String get16Jz(int n) {
		int d = n / 16;
		if ( d < 16) {
			return getExp(n / 16) + "" + getExp(n % 16);
		}
		int left = n % 16;
		return get16Jz(d) + "" + getExp(left);
	}

	public String get16BigDecimal(BigDecimal src) {

		BigDecimal divide = src.divideAndRemainder(new BigDecimal("16"))[0];
		BigDecimal baseData = new BigDecimal("16");

		if (divide.compareTo(baseData) < 0) {
			int intValue = src.intValue();
			int leftlast = intValue % 16;
			//System.out.println("divide="+divide+"("+getExp(divide.intValue())+")小于16,leftlast="+leftlast+"("+getExp(leftlast)+")");
			return getExp(intValue / 16) + "" + getExp(leftlast);
		}
		
		int left = src.divideAndRemainder(BigDecimal.valueOf(16))[1].intValue();
		String leftChar = getExp(left);
		System.out.println(src+":"+divide+":"+left+"("+leftChar+")");
		return get16BigDecimal(divide) + leftChar;
	}
	
	public static BigDecimal sixteenToten(String str16){
		
		if(str16 == null || "".equals(str16)){
			return null;
		}
		int length = str16.length();
		int j = 0;
		BigDecimal baseDecimal = new BigDecimal(0);
		for(int i = length-1; i >= 0 ;i--){
			//获取本位的字母
			char charAt = str16.charAt(i);
			//把十六进制字符转换为十进制
			Integer tenNum = getTenNum(charAt);
			//算出本位的值即先算出16的位数次方
			double thisWeiValue = Math.pow(16, j++);
			BigDecimal thisbigDecimal = new BigDecimal(thisWeiValue);
			thisbigDecimal.setScale(0, BigDecimal.ROUND_DOWN);
			//再乘以该位的十进制值
			String thisValueStr = new BigDecimal(tenNum).multiply(thisbigDecimal).toString();
			BigDecimal thisLastValue = new BigDecimal(thisValueStr);
			//把该位的值加到总值上
			baseDecimal = baseDecimal.add(thisLastValue);
			//System.out.println("第"+i+"位:"+charAt+"("+tenNum+"):"+thisLastValue+"("+tenNum+"x"+thisbigDecimal+"):"+baseDecimal);
		}
		
		return baseDecimal;
	}
	
	public static Integer getTenNum(char c){
		String valueOf = String.valueOf(c);
		if(StringUtils.isNumeric(valueOf)){
			return Integer.parseInt(valueOf);
		}
		
		switch (valueOf) {
		case "a":
			return 10;
		case "b":
			return 11;
		case "c":
			return 12;
		case "d":
			return 13;
		case "e":
			return 14;
		case "f":
			return 15;
		}
		return null;
	}

	public String getExp(int a) {
		if (a < 10) {
			return a + "";
		}
		if (a >= 10) {
			switch (a) {
			case 10:
				return "a";
			case 11:
				return "b";
			case 12:
				return "c";
			case 13:
				return "d";
			case 14:
				return "e";
			case 15:
				return "f";
			}
		}
		return a + "";
	}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值