Java十六进制操作

文章目录

    • Java十六进制字符串的异或校验
    • Java十六进制补0
    • Java十进制转十六进制
    • byte[]数组转换为16进制的字符串
    • 十六进制字符串转换为字节数组

Java十六进制字符串的异或校验

以此十六进制字符串为例: 0A 02 13 0F

  • 先把字符串按空格进行分割 hexStringToByteArray(String hexString)
  • 然后进行异或校验 getXor2String(String str)
    /**
     * 返回计算结果为十六进制字符串的异或校验
     *
     * @param 十六进制字符串
     * @return 异或校验结果
     */
    public static String getXor2String(String str) {
        byte[] bytes = ByteUtil.hexStringToByteArray(str);
        byte xor = getXor(bytes);
        //字节转十六进制
        String s = Integer.toHexString(0xFF & xor);
        return s;
    }
   /**
     * 16进制表示的字符串转换为字节数组
     * 返回的字节数组表示为十进制
     * @param hexString 16进制表示的字符串
     * @return byte[] 字节数组
     */
    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;
    }

Java十六进制补0

 /**
     * 十进制转十六进制,小于16的十进制前面补一个0
     */
    public static String decToHexStringDiv(int n) {
        int flag = n;
        StringBuffer s = new StringBuffer();
        String a;
        char[] b = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        while (n != 0) {
            s = s.append(b[n % 16]);
            n = n / 16;
        }
        a = s.reverse().toString();
        if (flag < 16) {
            a = 0 + a;
        }
        return a;
    }

Java十进制转十六进制

   /**
     * 十进制转十六进制
     *
     * @param int类型十进制
     * @return 十六进制
     */
 public static String decToHexString(int n) {
        StringBuffer s = new StringBuffer();
        String a;
        char[] b = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        while (n != 0) {
            s = s.append(b[n % 16]);
            n = n / 16;
        }
        a = s.reverse().toString();
        return a;
    }

byte[]数组转换为16进制的字符串

/**
     * byte[]数组转换为16进制的字符串
     *
     * @param bytes 要转换的字节数组
     * @return 转换后的结果
     */
    public static String bytesToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            String hex = Integer.toHexString(0xFF & bytes[i]);
            if (hex.length() == 1) {
                sb.append('0');
            }
            sb.append(hex);
        }
        return sb.toString();
    }

十六进制字符串转换为字节数组

 /**
     * 16进制表示的字符串转换为字节数组
     * 返回的字节数组表示为十进制
     *
     * @param hexString 16进制表示的字符串
     * @return byte[] 字节数组
     */
    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;
    }

你可能感兴趣的:(Java基础,学习,笔记,java)