zoukankan      html  css  js  c++  java
  • 输入16进制数序列,将其二进制反序并输出新的16进制数

    输入16进制数序列,如

    输入:1a1bf

    二进制:0001 1010 0001 1011 1111

    反转:1111  1101 1000 0101 1000

    输出:FD858

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    
    public class BitReverse {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
            try {
                String string = bReader.readLine();
                bReader.close();
                
                byte[] bt = getByte(string);
                //System.out.println("bt"+bt.length);
                
                byte[] res = new byte[bt.length];
                for(int i=0; i<res.length; ++i){
                    res[i] = reverse(bt[res.length-i-1]);
                }
                
                print(res);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        /**
         * 将读入的16进制序列字符串,转换为byte数组
         * @param str
         * @return
         * @throws Exception
         */
        private static byte[] getByte(String str) throws Exception{
            byte[] bt = new byte[(int)Math.round(str.length()/2.0)];
            str = str.toLowerCase();
            
            int k = 0, j = 0;
            for(int i=0; i<str.length(); i=i+2){
                k = 0; 
                j = 0;
                k = getInt(str.charAt(i));
                if((i+1)<str.length())
                    j = getInt(str.charAt(i+1));
                bt[(i/2)] = (byte)((k<<4) | j);
            }
            return bt;
        }
        
        /**
         * 将一个表示16进制的字符,转为相应的数字,用int存储,a-10,b-11,5-5
         * @param temp
         * @return
         * @throws Exception
         */
        private static int getInt(char temp) throws Exception{
            if(temp >= '0' && temp <= '9') return (temp-'0');
            else if (temp >= 'a' && temp <= 'f') {
                return (temp-'a'+10);
            }else {
                throw new Exception("非十六进制数");
            }
        }
        
        /**
         * 对byte b的二进制进行反转,使用Integer的reverse函数。也可自己进行位操作
         * @param b
         * @return
         */
        private static byte reverse(byte b){
            Integer temp = (int)b;
            temp = Integer.reverse(temp);
            return (byte)(temp>>24);
        }
        
        private static void print(byte[] b){
            String string = "";
            for(int i=0; i<b.length; ++i){
                string += Integer.toHexString(b[i] & 0xff);
            }
            System.out.println(string.toUpperCase());
        }
    }
  • 相关阅读:
    关于测试开发及其他——写在离职之前
    牛腩新闻发布系统——初探CSS
    牛腩新闻发布系统——后台前台整合技术
    Android Audio Focus的应用(requestAudioFocus)
    正则表达式详解
    牛腩新闻发布系统——初探JQuery,AJAX
    牛腩新闻发布系统——初探Javascript
    进入中文维基百科的方法
    *args 和**kwargs 的溯源
    mathematica9激活
  • 原文地址:https://www.cnblogs.com/pzhblog/p/4493083.html
Copyright © 2011-2022 走看看