二进制、十进制、十六进制之间转换方法

前言:之前开发涉及到三原色的渐变效果,然后自个根据进制之间的转换与三原色结合,写了个工具类,希望大家做到这块需求时可以帮助到大家。

根据源码自己封装的十进制、二进制、十六进制转换工具类:

/**
 * 说明:进制转换帮助类 
 * 作者:黄伟财 日期:2016-3-12
 */
public class SysConvertHelp {
	
	/**
	 * 获取三原色字符串中红绿蓝对应的整数值
	 * @param hStr
	 * @return
	 */
	public int[] getHSubValue(String hStr){//# ff ee dd
		int[] hSubs = new int[3];
		//存放色值字符串的三原色对应的红绿蓝整数值
		hSubs[0] = Integer.valueOf(toD(hStr.substring(1, 3), 16));
		hSubs[1] = Integer.valueOf(toD(hStr.substring(3, 5), 16));
		hSubs[2] = Integer.valueOf(toD(hStr.substring(5, 7), 16));
		return hSubs;
	}
	
	/**
	 * 十进制--->二进制		Integer.toBinaryString(a)
	 * 十进制--->十六进制 	Integer.toHexString(a)
	 * 任意进制数转为十进制数,注意:十进制都其他进制相互转换的中转进制
	 */
	public String toD(String num, int onsetSystem) {
		int r = 0;
		for (int i = 0; i < num.length(); i++) { // 计算X的Y次方
			// 结果就是,任意进制转成十进制的值
			r = (int) (r + formatting2Num(num.substring(i, i + 1))
					* Math.pow(onsetSystem, num.length() - i - 1));
		}
		return String.valueOf(r);
	}
	
	/**
	 * 十进制转十六进制
	 * @return
	 */
	public String toH(int dNum){
		return Integer.toHexString(dNum);
	}
	
	/**
	 * 十进制转二进制
	 * @return
	 */
	public String toB(int dNum){
		return Integer.toBinaryString(dNum);
	}
	
	
	/** 将十六进制中的字母转为对应的数字 */
	public int formatting2Num(String numStr) {
		int i = 0;
		//匹配十进制以内的数字
		for (int u = 0; u < 10; u++) {
			if (numStr.equals(String.valueOf(u))) {
				i = u;
			}
		}
		if (numStr.equals("a") || numStr.equals("A")) {
			i = 10;
		}
		if (numStr.equals("b") || numStr.equals("B")) {
			i = 11;
		}
		if (numStr.equals("c") || numStr.equals("C")) {
			i = 12;
		}
		if (numStr.equals("d") || numStr.equals("D")) {
			i = 13;
		}
		if (numStr.equals("e") || numStr.equals("E")) {
			i = 14;
		}
		if (numStr.equals("f") || numStr.equals("F")) {
			i = 15;
		}
		return i;
	}
	
	private static SysConvertHelp sysConvertHelp;

    //控制实例入口在getInstance方法中
    private SysConvertHelp() {

    }

    //唯一实例入口
    public static SysConvertHelp getInstance() {
        if (null == sysConvertHelp) {
            synchronized (SysConvertHelp.class) {
                if (null == sysConvertHelp) {//确保单一实例
                    sysConvertHelp = new SysConvertHelp();
                }
            }
        }
        return sysConvertHelp;
    }
}

源码案例:

public class MainActivity extends Activity implements OnClickListener {
	public RadioButton two, ten, sixteen;
	public Button[] buttons = new Button[16];
	public Button backbButton, cleanButton;
	public EditText econtent;
	int jinzhi = 1;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		econtent = (EditText) findViewById(R.id.Econtent);
		two = (RadioButton) findViewById(R.id.radio0);
		ten = (RadioButton) findViewById(R.id.radio1);
		sixteen = (RadioButton) findViewById(R.id.radio2);
		
		two.setOnClickListener(this);
		ten.setOnClickListener(this);
		sixteen.setOnClickListener(this);
		
		backbButton = (Button) findViewById(R.id.backspace);
		cleanButton = (Button) findViewById(R.id.clean);
		buttons[0] = (Button) findViewById(R.id.b0);
		buttons[1] = (Button) findViewById(R.id.b1);
		buttons[2] = (Button) findViewById(R.id.b2);
		buttons[3] = (Button) findViewById(R.id.b3);
		buttons[4] = (Button) findViewById(R.id.b4);
		buttons[5] = (Button) findViewById(R.id.b5);
		buttons[6] = (Button) findViewById(R.id.b6);
		buttons[7] = (Button) findViewById(R.id.b7);
		buttons[8] = (Button) findViewById(R.id.b8);
		buttons[9] = (Button) findViewById(R.id.b9);
		buttons[10] = (Button) findViewById(R.id.b10);
		buttons[11] = (Button) findViewById(R.id.b11);
		buttons[12] = (Button) findViewById(R.id.b12);
		buttons[13] = (Button) findViewById(R.id.b13);
		buttons[14] = (Button) findViewById(R.id.b14);
		buttons[15] = (Button) findViewById(R.id.b15);
		for (int i = 0; i < buttons.length; i++) {
			buttons[i].setOnClickListener(this);
		}
		backbButton.setOnClickListener(this);
		cleanButton.setOnClickListener(this);
	}
	
	@Override
	public void onClick(View arg0) {
		int a = 0;
		
		//二进制
		if (arg0 == two) {
			if (jinzhi == 1) {
				a = Integer.valueOf(econtent.getText().toString());
				econtent.setText(Integer.toBinaryString(a));
			}
			if (jinzhi == 2) {
				econtent.setText(HToB(econtent.getText().toString()));
			}
			jinzhi = 0;
			for (int i = 0; i < 16; i++) {
				if (i < 2) {
					buttons[i].setEnabled(true);
				} else {
					buttons[i].setEnabled(false);
				}
			}
		}
		
		//十进制
		if (arg0 == ten) {
			if (jinzhi == 2) {
				econtent.setText(toD(econtent.getText().toString(), 16));
			}
			if (jinzhi == 0) {
				econtent.setText(toD(econtent.getText().toString(), 2));
			}
			jinzhi = 1;
			for (int i = 0; i < 16; i++) {
				if (i < 10) {
					buttons[i].setEnabled(true);
				} else {
					buttons[i].setEnabled(false);
				}
			}
		}
		
		//十六进制
		if (arg0 == sixteen) {
			if (jinzhi == 1) {
				a = Integer.valueOf(econtent.getText().toString());
				econtent.setText(Integer.toHexString(a));
			}
			if (jinzhi == 0) {
				econtent.setText(BToH(econtent.getText().toString()));
			}
			jinzhi = 2;
			for (int i = 0; i < 16; i++) {
				if (i < 16) {
					buttons[i].setEnabled(true);
				} else {
					buttons[i].setEnabled(false);
				}
			}
		}
		
		//btn事件
		for (int i = 0; i < buttons.length; i++) {
			//选中的某个btn
			if (arg0 == buttons[i]) {
				String aString = econtent.getText().toString();
				if (aString.equals("0")) {
					//输入框为0时,直接显示(针对字母做些处理)
					econtent.setText(formattingH(i));
				} else {
					//输入框拼接字符串
					econtent.setText(aString + formattingH(i));
				}
			}
		}
		
		//回退
		if (arg0 == backbButton) {
			String scontent = econtent.getText().toString();
			if (scontent.length() > 1) {
				//截取前面部分,效果就是删除最后一位
				econtent.setText(scontent.substring(0, scontent.length() - 1));
			}else{
				econtent.setText("0");
			}
		}
		
		//清空,直接设置为0
		if (arg0 == cleanButton) {
			econtent.setText("0");
		}
		
	}
	/**十六进制转二进制*/
	public String HToB(String a) {
		String b = Integer.toBinaryString(Integer.valueOf(toD(a, 16)));
		return b;
	}
	/**二进制转十六进制*/
	public String BToH(String a) {
		// 将二进制转为十进制再从十进制转为十六进制
		String b = Integer.toHexString(Integer.valueOf(toD(a, 2)));
		
		return b;
	}
	
	/**任意进制数转为十进制数,注意:十进制都其他进制相互转换的中转进制*/
	public String toD(String a, int onsetSystem) {
		int r = 0;
		for (int i = 0; i < a.length(); i++) {                 //计算X的Y次方
			//结果就是,任意进制转成十进制的值
			r = (int) (r + formatting(a.substring(i, i + 1)) * Math.pow(onsetSystem, a.length() - i - 1));
		} 
		return String.valueOf(r);
	}
	/**将十六进制中的字母转为对应的数字*/
	public int formatting(String a) {
		int i = 0;
        //匹配十进制以内的数字
		for (int u = 0; u < 10; u++) {
			if (a.equals(String.valueOf(u))) {
				i = u;
			}
		}
		if (a.equals("a")) {
			i = 10;
		}
		if (a.equals("b")) {
			i = 11;
		}
		if (a.equals("c")) {
			i = 12;
		}
		if (a.equals("d")) {
			i = 13;
		}
		if (a.equals("e")) {
			i = 14;
		}
		if (a.equals("f")) {
			i = 15;
		}
		return i;
	}
	/**将十进制中的数字转为十六进制对应的字母*/
	public String formattingH(int a) {
		String i = String.valueOf(a);//转出字符串
		if (a == 10) {
			i = "a";
		}
		if (a == 11) {
			i = "b";
		}
		if (a == 12) {
			i = "c";
		}
		if (a == 13) {
			i = "d";
		}
		if (a == 14) {
			i = "e";
		}
		if (a == 15) {
			i = "f";
		}
		return i;
	}
}

注意:
任意进制之间的转换都需要通过十进制作为中转进制,该进制—>十进制—>目标进制
小结:系统封装了十进制转任意进制的API,所以进制之间的转换,其实就是和十进制之间的转换,toD方法实现了任意进制转十进制
十进制—>二进制
Integer.toBinaryString(a)
十进制—>十六进制
Integer.toHexString(a)
Math.pow(x, y) 计算X的Y次方

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值