• 进制转换


    public class MathUtil {
        /**
         * 获取十进制数转变为四位十六进制数
         *
         * @param num
         * @return
         */
        public static String getIntToHexString(int num) {
            byte[] bytes = intToBytes(num);
            String string = bytes2HexString(bytes);
            string = string.substring(4);
            return string;
        }
    
        /**
         * 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。
         *
         * @param value
         * @return
         */
        private static byte[] intToBytes(int value) {
            byte[] src = new byte[4];
            src[0] = (byte) ((value >> 24) & 0xFF);
            src[1] = (byte) ((value >> 16) & 0xFF);
            src[2] = (byte) ((value >> 8) & 0xFF);
            src[3] = (byte) (value & 0xFF);
            return src;
        }
    
        private static byte[] hex = "0123456789ABCDEF".getBytes();
    
        /**
         * 从字节数组到十六进制字符串转换
         *
         * @param b
         * @return
         */
        public static String bytes2HexString(byte[] b) {
            byte[] buff = new byte[2 * b.length];
            for (int i = 0; i < b.length; i++) {
                buff[2 * i] = hex[(b[i] >> 4) & 0x0f];
                buff[2 * i + 1] = hex[b[i] & 0x0f];
            }
            return new String(buff);
        }
    
        /**
         * 将指定字符串src,以每两个字符分割转换为16进制形式
         * 如:"2B44EFD9" –> byte[]{0x2B, 0×44, 0xEF, 0xD9}
         *
         * @param src String
         * @return byte[]
         */
        private static byte[] HexString2Bytes(String src) {
            byte[] ret = new byte[src.length() / 2];
            byte[] tmp = src.getBytes();
            for (int i = 0; i < tmp.length / 2; i++) {
                ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);
            }
            return ret;
        }
    
        /**
         * 将两个ASCII字符合成一个字节;
         * 如:"EF"--> 0xEF
         *
         * @param src0 byte
         * @param src1 byte
         * @return byte
         */
        private static byte uniteBytes(byte src0, byte src1) {
            byte _b0 = Byte.decode("0x" + new String(new byte[]{src0}))
                    .byteValue();
            _b0 = (byte) (_b0 << 4);
            byte _b1 = Byte.decode("0x" + new String(new byte[]{src1}))
                    .byteValue();
            byte ret = (byte) (_b0 ^ _b1);
            return ret;
        }
    
        private static int byte2Int(byte[] b) {
            int intValue = 0;
            for (int i = 0; i < b.length; i++) {
                intValue += b[i] & 0xFF;
            }
            return intValue;
        }
    
        public static String totalNumber(String string) {
            byte[] bytes = HexString2Bytes(string);
            int asd = byte2Int(bytes);
            String s = Integer.toHexString(asd);
            if (s.length() == 3) {
                s = '0' + s;
            }
    
            return s;
        }
    
        public static String bytesToHexString(byte[] src) {
            StringBuilder stringBuilder = new StringBuilder("");
            if (src == null || src.length <= 0) {
                return null;
            }
            for (int i = 0; i < src.length; i++) {
                int v = src[i] & 0xFF;
                String hv = Integer.toHexString(v);
                if (hv.length() < 2) {
                    stringBuilder.append(0);
                }
                stringBuilder.append(hv);
            }
            return stringBuilder.toString();
        }
    
        /**
         * 二进制转16进制
         *
         * @param bString
         * @return
         */
        public static String binaryString2hexString(String bString) {
            if (bString == null || bString.equals("") || bString.length() % 8 != 0)
                return null;
            StringBuffer tmp = new StringBuffer();
            int iTmp = 0;
            for (int i = 0; i < bString.length(); i += 4) {
                iTmp = 0;
                for (int j = 0; j < 4; j++) {
                    iTmp += Integer.parseInt(bString.substring(i + j, i + j + 1)) << (4 - j - 1);
                }
                tmp.append(Integer.toHexString(iTmp));
            }
            return tmp.toString();
        }
    
        /**
         * 16进制转二进制
         *
         * @param hexString
         * @return
         */
        public static String hexString2binaryString(String hexString) {
            if (hexString == null || hexString.length() % 2 != 0)
                return null;
            String bString = "", tmp;
            for (int i = 0; i < hexString.length(); i++) {
                tmp = "0000"
                        + Integer.toBinaryString(Integer.parseInt(
                        hexString.substring(i, i + 1), 16));
                bString += tmp.substring(tmp.length() - 4);
            }
            return bString;
        }
    }
  • 相关阅读:
    _CrtSetBreakAlloc(…)来检测内存泄漏+VC使用CRT调试功能检测内存泄漏(转)
    VC 2005 解决方案的目录结构设置和管理
    ArcGIS Engine基础开发教程(转)
    vc++实现avi文件的操作 用于视频解析及录制(转)
    微软免费杀毒软件下周二公测 年底推简体中文版 狼人:
    大量用户升级iPhone3.0系统导致苹果服务器故障 狼人:
    苹果发布45个iPhone和iTouch漏洞补丁 狼人:
    “汉网热血三国”“南方电视台”等网站被挂马 狼人:
    WAPI有望晋身国际标准 最大阻力美国首度支持 狼人:
    前Google员工推云安全服务检测网站挂马 狼人:
  • 原文地址:https://www.cnblogs.com/xinmengwuheng/p/5893421.html
Copyright © 2020-2023  润新知