A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
               
        }
}

6 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
可以的,楼主将来必定成为一代大牛
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
努力学习中
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马