zoukankan      html  css  js  c++  java
  • 16进制字符串 和 文本字符串 相互转换的工具类

    /**
     * 16进制字符串 和 文本字符串 相互转换的工具类
     */
    public class HexStringUtil {
    
        /** 16进制能用到的所有字符 */
        private static String hexCharsStr = "0123456789ABCDEF";
    
        /** 16进制能用到的所有字符数组 */
        private static char[] hexCharsArr = hexCharsStr.toCharArray();
    
        /**
         * 0123456789ABCDEF -> 0 ~ 15
         */
        private static byte oneHexChar2Byte(char c) {
            byte b = (byte) hexCharsStr.indexOf(c);
            return b;
        }
    
        /**
         * 0 ~ 15 -> 0123456789ABCDEF
         */
        private static char byte2OneHexChar(byte b) {
            char c = hexCharsArr[b];
            return c;
        }
    
        /**
         * 两个16进制字符 -> 1个byte数值
         */
        private static byte twoHexChar2Byte(char high, char low) {
            byte b = (byte) (oneHexChar2Byte(high) << 4 | oneHexChar2Byte(low));
            return b;
        }
    
        /**
         * 1个byte数值 -> 两个16进制字符
         */
        private static char[] byte2TwoHexChar(byte b) {
            char[] chars = new char[2];
    
            // 高4位, 与操作 1111 0000
            byte high4bit = (byte) ((b & 0x0f0) >> 4);
            chars[0] = byte2OneHexChar((byte) high4bit);
    
            // 低四位, 与操作 0000 1111
            byte low4bit = (byte) (b & 0x0f);
            chars[1] = byte2OneHexChar((byte) low4bit);
    
            return chars;
        }
    
        /**
         * 文本字符串 -> 十六进制字符串
         */
        public static String str2HexString(String str) {
            byte[] bytes = str.getBytes();
            return bytes2HexString(bytes);
        }
    
        /**
         * byte数组 -> 十六进制字符串
         */
        public static final String bytes2HexString(byte[] bytes) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bytes.length; i++) {
                char[] chars = byte2TwoHexChar(bytes[i]);
                sb.append(new String(chars));
            }
            return sb.toString();
        }
    
        /**
         * 十六进制字符串 -> 文本字符串
         */
        public static String hexString2Str(String hexStr) {
            byte[] bytes = hexString2Bytes(hexStr);
            return new String(bytes);
        }
    
        /**
         * 16进制的字符串 -> byte数组
         */
        public static byte[] hexString2Bytes(String hexStr) {
            int length = (hexStr.length() / 2);
            byte[] bytes = new byte[length];
            char[] charArr = hexStr.toCharArray();
            for (int i = 0; i < length; i++) {
                int position = i * 2;
                bytes[i] = twoHexChar2Byte(charArr[position], charArr[position + 1]);
            }
            return bytes;
        }
    
    }
  • 相关阅读:
    mysql低版本升级到5.7
    mysql权限管理
    本地代码推送到远程git仓库
    解决ie低版本不认识html5标签
    使用ssh远程访问github
    centos7使用kubeadm搭建kubernetes集群
    js es6深入应用系列(Generator)
    js console一些常用的功能
    重新整理.net core 计1400篇[五] (.net core 修改为Startup模式 )
    重新整理.net core 计1400篇[五] (.net core 添加mvc 中间件 )
  • 原文地址:https://www.cnblogs.com/zj0208/p/10650671.html
Copyright © 2011-2022 走看看