zoukankan      html  css  js  c++  java
  • ByteUtil

    import java.nio.charset.StandardCharsets;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class ByteUtil {
    
        /**
         * 字符串转16进制
         *
         * @param hexString
         * @return
         */
        public static byte[] hexStringToBytes(String hexString) {
            if (hexString == null || "".equals(hexString)) {
                return null;
            }
            // toUpperCase将字符串中的所有字符转换为大写
            hexString = hexString.toUpperCase();
            int length = hexString.length() / 2;
            // toCharArray将此字符串转换为一个新的字符数组。
            char[] hexChars = hexString.toCharArray();
            byte[] d = new byte[length];
            for (int i = 0; i < length; i++) {
                int pos = i * 2;
                d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
            }
            return d;
        }
    
        /**
         * charToByte返回在指定字符的第一个发生的字符串中的索引,即返回匹配字符
         *
         * @param c
         * @return
         */
        private static byte charToByte(char c) {
            return (byte) "0123456789ABCDEF".indexOf(c);
        }
    
        /**
         * 将字节数组转换为16进制字符串
         *
         * @param bytes
         * @return
         */
        public static String binaryToHexString(byte[] bytes) {
            String hexStr = "0123456789ABCDEF";
            StringBuilder result = new StringBuilder();
            String hex = "";
            for (byte b : bytes) {
                hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
                hex += String.valueOf(hexStr.charAt(b & 0x0F));
                result.append(hex).append(" ");
            }
            return result.toString();
        }
    
        /**
         * 截取指定位置判断消息类型
         *
         * @param position
         * @param data
         * @return
         */
        public static String getFunctionCode(int[] position, String[] data) {
            StringBuilder builder = new StringBuilder("");
            for (int i : position) {
                try {
                    builder.append(data[i]);
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            }
            return builder.toString();
        }
    
        /**
         * Hex字符串转Byte
         *
         * @param hex 范围为0x00到0xFF
         * @return
         */
        public static byte hexToByte(String hex) {
            return (byte) Integer.parseInt(hex, 16);
        }
    
        /**
         * @param hex
         * @return
         */
        public static String hexToNumber(String hex) {
            hex = hex.replaceAll(" ", "");
            StringBuilder intString = new StringBuilder();
            for (int i = 0; i < hex.length(); i += 2) {
                String tem = hex.substring(i, i + 2);
                intString.append(Integer.parseInt(tem, 16));
            }
            return intString.toString();
        }
    
        /**
         * 16进制表示的字符串转换为字节数组
         *
         * @param hexString
         * @return
         */
        public static byte[] hexStringToByteArray(String hexString) {
            hexString = hexString.replaceAll(" ", "");
            int len = hexString.length();
            byte[] bytes = new byte[len / 2];
            for (int i = 0; i < len; i += 2) {
                // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节
                bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i + 1), 16));
            }
            return bytes;
        }
    
        /**
         * int转16进制字符串(两个字节)
         *
         * @param v
         * @return
         */
        public static String intToHexString(int v) {
            return String.format("%04x", v);
        }
    
        /**
         * int转16进制字符串(1个字节)
         *
         * @param v
         * @return
         */
        public static String intToHexStringSingle(int v) {
            return String.format("%02x", v);
        }
    
        /**
         * 16进制字符串转int(两个字节)
         *
         * @param hex
         * @return
         */
        public static int hexStringToInt(String hex) {
            return Integer.parseInt(hex.replaceAll(" ", ""), 16);
        }
    
        /**
         * 字符串转化成为16进制字符串
         *
         * @param s
         * @return
         */
        public static String strTo16(String s) {
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < s.length(); i++) {
                int ch = s.charAt(i);
                String s4 = Integer.toHexString(ch);
                str.append(s4);
            }
            return str.toString();
        }
    
        /**
         * 字节数组转16进制
         *
         * @param bytes 需要转换的byte数组
         * @return 转换后的Hex字符串
         */
        public static String bytesToHex(byte[] bytes) {
            StringBuilder sb = new StringBuilder();
            for (byte aByte : bytes) {
                String hex = Integer.toHexString(aByte & 0xFF);
                if (hex.length() < 2) {
                    sb.append(0);
                }
                sb.append(hex);
            }
            return sb.toString();
        }
    
        /**
         * 日期转换7个字节
         *
         * @param date
         * @return
         */
        public static byte[] dateToBytes(Date date) {
            SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd HH mm ss");
            String str = df.format(date);
            String[] strings = str.split(" ");
            String[] newStrings = new String[5];
            System.arraycopy(strings, 1, newStrings, 0, strings.length - 1);
            byte[] bytes = new byte[7];
            byte[] temByte = ByteUtil.hexStringToByteArray(ByteUtil.intToHexString(Integer.parseInt(strings[0])));
            bytes[0] = temByte[0];
            bytes[1] = temByte[1];
            int i = 2;
            for (String s : newStrings) {
                bytes[i] = ByteUtil.hexStringToByteArray(ByteUtil.intToHexStringSingle(Integer.parseInt(s)))[0];
                i++;
            }
            return bytes;
        }
    
        /**
         * 7个字节转日期
         *
         * @param hex
         * @return
         */
        public static Date hexToDate(String hex) {
            Date date = null;
            SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    
            StringBuilder sBuf = new StringBuilder();
            sBuf.append(Integer.parseInt(hex.substring(0, 4), 16));
    
            String str = hex.substring(4);
            for (int i = 0; i < str.length(); i = i + 2) {
                int num = Integer.parseInt(str.substring(i, i + 2), 16);
                sBuf.append(String.format("%02d", num));
            }
            try {
                date = df.parse(sBuf.toString());
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return date;
        }
    
        /**
         * 产生numSize位16进制随机数
         *
         * @param numSize
         * @return
         */
        public static String getRandomValue(int numSize) {
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < numSize; i++) {
                char temp = 0;
                int key = (int) (Math.random() * 2);
                switch (key) {
                    case 0:
                        //产生随机数字
                        temp = (char) (Math.random() * 10 + 48);
                        break;
                    case 1:
                        //产生a-f
                        temp = (char) (Math.random() * 6 + 'a');
                        break;
                    default:
                        break;
                }
                str.append(temp);
            }
            return str.toString();
        }
    
        public static void main(String[] args) {
            int v = 59466;
            byte[] byteArray = ByteUtil.hexStringToByteArray(ByteUtil.intToHexString(v));
            byte[] byteArray2 = Integer.toHexString(v).getBytes(StandardCharsets.UTF_8);
    
            System.out.println();
        }
  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/xiaomaoyvtou/p/14744221.html
Copyright © 2011-2022 走看看