liusuyi
2025-12-16 ecb9599b25fde0e3569b46e667ca1990294f8665
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.ard.common.utils;
/**
 * 字节工具类
 *
 * @author ard
 */
public class ByteUtils {
 
    /**
     * 将字节数组转换为十六进制字符串,每个字节以0x格式显示
     * @param bytes 字节数组
     * @return 格式化后的字符串
     */
    public static String bytesToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("0x%02X ", b));
        }
        return sb.toString().trim();
    }
 
    /**
     * 将字节数组转换为常规字符串
     * @param bytes 字节数组
     * @return 字符串
     */
    public static String bytesToString(byte[] bytes) {
        return new String(bytes);
    }
 
    /**
     * 将单个字节转换为0x十六进制格式字符串
     * @param b 字节
     * @return 0x格式的字符串
     */
    public static String byteToHex(byte b) {
        return String.format("0x%02X", b);
    }
 
    /**
     * 将十六进制字符串转换为字节数组
     * @param hexString 十六进制字符串,支持0x前缀
     * @return 字节数组
     */
    public static byte[] hexStringToBytes(String hexString) {
        hexString = hexString.replaceAll("0x", "").replaceAll("\\s+", "");
        int length = hexString.length();
        byte[] data = new byte[length / 2];
        for (int i = 0; i < length; i += 2) {
            data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
                                 + Character.digit(hexString.charAt(i+1), 16));
        }
        return data;
    }
 
    /**
     * 将字节数组转换为十六进制字符串,每个字节用空格分隔显示
     * @param bytes 字节数组
     * @return 格式化后的十六进制字符串
     */
    public static String bytesToHexWithSpaces(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(String.format("%02X", bytes[i]));
            if (i < bytes.length - 1) {
                sb.append(" ");
            }
        }
        return sb.toString();
    }
}