本篇博文不讲废话,只上代码,代码中会有注释。因这两天公司项目中需要用到进制转换,所以细作了研究。
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影院等你