一篇博文用Java玩轉二進制、十進制、十六進制間的轉換

本篇博文不講廢話,只上代碼,代碼中會有註釋。因這兩天公司項目中需要用到進制轉換,所以細作了研究。

package com.redxun.utils;

import java.util.ArrayList;

/**
 * 16進制轉2進制
 *  十六進制轉爲十進制
 * 2進制轉爲10進制
 * 
 * 十六個十六進制對應的二進制
 * 16個十六進制對應的十進制
 * 2017-12-22
 * @author long
 *
 */
public class BHDConvert {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		htd("D");
		//十六進制轉爲二進制
		System.out.println(convertHtB("3ABDC4B9"));
		//十六進制轉爲十進制
		System.out.println(convertHtD("3ABDC4B9"));
		//十進制轉爲十六進制
		ArrayList<String> arr=new ArrayList<>();//遞歸的過程中產生多箇中間值,無法直接返回需要的值,所以用鏈表存儲所有的中間值,再取出需要的最終轉換後的十六進制
		System.out.println("十進制轉爲十六進制爲"+convertDtH(985515193,"",arr));

		//二進制轉爲十進制
		System.out.println(convertBtD("01000100010111011100"));
		arr=new ArrayList<>();
		//二進制轉爲十六進制->2-10-16
		System.out.println(convertDtH(convertBtD("01000100010111011100"),"",arr));
		
		//十進制轉爲二進制10-16-2
		arr=new ArrayList<>();//切記每次要重置鏈表
		System.out.println("十進制轉爲二進制"+convertHtB(convertDtH(985515193,"",arr)));
	}
	/**
	 * hexadecimal (394D) to binary(0001 1001 0100 1101)
	 * 十六進制轉爲二進制
	 * @desc 
	 * @author zcl
	 * @date 2019年4月11日
	 */
	public static String convertHtB(String h) {
		String b="";
		for(int i=0;i<h.length();i++){
			String o=h.substring(i,i+1);
			b=b+htb(o);			
		}
		return b;
	}
	/**
	 * 十六進制轉爲十進制
	 * @desc 
	 * @author zcl
	 * @date 2019年4月11日
	 */
	private static int convertHtD(String h) {
		// TODO Auto-generated method stub
		double d=0;
		for(int i=0;i<h.length();i++){
			int o=htd(h.substring(i,i+1));//將十六進制中的單個字符依次轉爲十進制
			d=d+o*Math.pow(16, h.length()-i-1);
		}
		return (int)d;
	}
	/**
	 *  十進制轉爲十六進制
	 * @author zcl
	 * @創建時間: 2019年4月12日上午9:43:57 
	 * @param decimal	待轉化的十進制
	 * @param h	遞歸轉換過程中產生的十六進制中間值
	 * @param arr 包含最終轉化成的十六進制數和中間值的鏈表
	 * @return
	 */
	private static String convertDtH(int decimal,String h,ArrayList<String> arr) {
		h=""+h;
		if(decimal/16>16){//decimal>256
//			System.out.println(decimal);
//			System.out.println("h爲"+h);
			convertDtH(decimal/16,dth(decimal%16)+""+h,arr);//必須對十六進制的每一位執行dth方法,目的是將比如15轉爲F
		}else if(decimal>16){//decimal>16
//			System.out.println(decimal);
//			System.out.println("h爲"+h);
			h=dth(decimal/16)+""+dth(decimal%16)+h;//必須對十六進制的每一位執行dth方法,目的是將比如15轉爲F
		}
		arr.add(h);
//		System.out.println("h爲"+h);
		return arr.get(0);
	}
	//binary to decimal
	/**
	 * 二進制轉爲十進制
	 * @desc 
	 * @author zcl
	 * @date 2019年4月11日
	 * @param b
	 * @return
	 */
	public static int convertBtD(String b){
		double d=0;
		for(int i=0;i<b.length();i++){
			String t=b.substring(i, i+1);
			int tt=Integer.parseInt(t);
			Double g=tt*Math.pow(2,b.length()-i-1);
			d=d+g;
		}
		
		return (int)d;
	}
	
	/**
	 * 十六個十六進制(0-F)->對應的二進制(0000,1111)
	 * @desc 
	 * @author zcl
	 * @date 2019年4月11日
	 * @param h 十六進制(0-F)
	 * @return 對應的二進制(0000,1111)
	 */
	public static String htb(String h){
		String b=null;
		String hs[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
		String bs[]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001"
				,"1010","1011","1100","1101","1110","1111"};
		for(int i=0;i<hs.length;i++){
			if(hs[i].equals(h)){
				b=bs[i];
			}
		}
		return b;
	}
	/**
	 * 16個十六進制(0-F)->對應的十進制(0-15)
	 * @author zcl
	 * @創建時間: 2019年4月12日上午9:46:33 
	 * @param h 十六進制(0-F)
	 * @return 對應的十進制(0-15)
	 */
	private static int  htd(String h) {
		String hs[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
		int ds[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		int d=0;
		int i=0;
		while(i<hs.length){
			if(h.equals(hs[i])){
				d=ds[i];
			}
			i++;
		}
		return d;
	}
	/**
	 * 16個十進制(0-15)->對應的十六進制(0-F)
	 * @author zcl
	 * @創建時間: 2019年4月12日上午9:25:31 
	 * @param d 十進制(0-15)
	 * @return 對應的十六進制(0-F)
	 */
	private static String  dth(int d) {
		String hs[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
		int ds[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		String h="";
		int i=0;
		while(i<hs.length){
			if(d==ds[i]){
				h=hs[i];
			}
			i++;
		}
		return h;
	}
}

歡迎大家訪問我的視頻網站553影院 和 個人博客網站,視頻網站註冊並登陸後即可擁有發表評論,記錄自己的播放,搜索,登陸記錄以及收藏視頻等功能。我在553影院等你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章