| 
 
| package com.eshel.test; /**
 * 进制转换
 * @author 郭世文
 * @version 1.0
 */
 public class HexTransform {
 public final int TWO_TYPE = 2;//二进制
 public final int EIGHT_TYPE = 8;//八进制
 public final int SIXTEEN_TYPE = 16;//十六进制
 private final static String TEN = "A";//十六进制中10
 private final static String TEN_ADD_ONE = "B";//十六进制中11
 private final static String TEN_ADD_TWO = "C";//十六进制中12
 private final static String TEN_ADD_THREE = "D";//十六进制中13
 private final static String TEN_ADD_FOUR = "E";//十六进制中14
 private final static String TEN_ADD_FIVE = "F";//十六进制中15
 
 /**
 * <p><blockquote><pre>
 整数转换为二进制、八进制、十六进制
 46        除数        余数        商
 2        0        23
 2        1        11
 2        1        5
 2        1        2
 2        0        0
 1
 
 计算机 转换: 46--> 101110
 
 55        2        1        27
 2        1        13
 2        1        6
 2        0        3
 2        1        1
 2        1        0
 
 首先定义String num2 用来接收转换后的二进制
 然后定义局部变量 除数t 余数y  商 s
 把num的值赋值给商s
 使用while(true)循环进行除法并把余数添加到num2末尾
 判断商是否为0 如果商为0,再判断余数是否为0,如果余数也为0,则在num2末尾添加一个1,最后break跳出循环
 把num2的内容反转然后返回
 </blockquote></pre></p>
 
 * @param num 十进制数
 * @param type 值为 {@link TWO_TYPE}或{@link EIGHT_TYPE}或{@link SIXTEEN_TYPE }
 * @return 返回 result
 */
 public static String intTo(int num,int type) {
 String result = "";
 int t = type;//除数
 int y = 0;//余数
 int s = num;//商
 
 while(true){
 y = s%t;
 s /= t;
 if(t == 16 && y >=10 ){
 String y2 = "";
 switch(y){
 case 10 :
 y2 = TEN;
 break;
 case 11 :
 y2 = TEN_ADD_ONE;
 break;
 case 12 :
 y2 = TEN_ADD_TWO;
 break;
 case 13 :
 y2 = TEN_ADD_THREE;
 break;
 case 14 :
 y2 = TEN_ADD_FOUR;
 break;
 case 15 :
 y2 = TEN_ADD_FIVE;
 break;
 }
 result+=y2;
 }else
 result+=y;
 if(s == 0){
 result += y == 0 ? "1" : "";
 break;
 }
 }
 result = new StringBuffer(result).reverse().toString();
 return result;
 }
 /**
 * <p><blockquote><pre>
 二进制、八进制、十六进制转换为整数
 46        除数                余数                商
 2                0                23
 2                1                11
 2                1                5
 2                1                2
 2                0                0
 1
 101110      因子                元素                结果
 2                0*2^0        0
 2                1*2                2
 2                1*2*2        4
 2                1*2*2*2        8
 2                0*2*2*2*2  0
 2                1*2*2*2*2*2         32
 *                         0+2+4+8+0+32=46
 计算机 转换: 46--> 101110
 
 *首先定义int result 用来接收转换后的十进制
 *然后把num反转并赋值给num
 *定义numChar 并把num转换为字符数组赋值给 numChar
 *然后定义局部变量 因子t 元素 y  结果 r
 *使用for(int i = 0;i<numChar.lenght();i++)循环
 *
 *把numChar[i]转换为整数y = 0 或1
 *进行乘法运算 r = y*2^i;
 *result+=r;
 *
 *把result的内容返回
 * </blockquote></pre></p>
 * 将二进制、八进制、十六进制转换为十进制
 * @param num                数值
 * @param type                数值进制类型
 * @retrurn
 */
 public static int ToInt(String num , int type ) {
 int result = 0;
 num = new StringBuffer(num).reverse().toString();
 char[] numChar = num.toCharArray();
 int t;
 int y;
 int r;
 for(int i = 0;i<numChar.length;i++){
 try {
 r = Double.valueOf(Math.pow(type, i)).intValue()*numCharToInt(numChar[i]);
 result += r;
 } catch (Exception e) {
 System.out.println("输入进制有误");
 e.printStackTrace();
 }
 
 }
 return result;
 
 }
 /** 二进制转换为十进制、八进制、十六进制
 *
 * @param num 要转换的数
 * @param type 要转换为什么类型
 * @return
 */
 public static Object binaryTo(String num , int type ) {
 if(type != 2){
 Object result = null;
 result = ToInt(num, 2);
 switch(type){
 case 8:
 result = intTo((Integer)result , 8);
 break;
 case 16:
 result = intTo((Integer)result , 16);
 break;
 }
 return result;
 }
 return num;
 
 }
 /** 十进制、八进制、十六进制转换为二进制
 *
 * @param num 要转换的数
 * @param type 要转换的类型
 * @return
 */
 public static String toBinary(Object num , int type ){
 if(type != 2){
 Object result = num;
 if(type !=10 ){
 result = ToInt(num.toString(), type);
 }
 return intTo((Integer)result, 2);
 }
 return num.toString();
 
 }
 /** 八进制转换为十六进制
 *
 * @param num 要转换的数
 * @return
 */
 
 public static String EightToSixteen(String num ) {
 Object result = null;
 result = ToInt(num, 8);
 result = intTo((Integer)result, 16);
 return result.toString();
 
 }
 /** 十六进制转换为八进制
 * @param num 要转换的数
 * @return
 */
 public static String SixteenToEight (String num){
 Object result = null;
 result = ToInt(num, 16);
 result = intTo((Integer)result, 8);
 return result.toString();
 
 }
 
 private static int numCharToInt(char charNum) throws Exception {
 int num = -1;
 char[]charArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E'};
 for(int i=0;i<charArray.length;i++){
 if(charArray[i] == charNum)
 num = i;
 }
 if(num == -1){
 throw new Exception("charArray[]数组中没有字符charNum");
 }else
 return num;
 
 }
 }
 
 
 | 
 |