package cn.iocoder.yudao.module.remote.util;

import java.util.Arrays;

public class HexConverter {

    public static byte[] hexStringToByteArray(String hexString) {
        // 移除所有空格（包括中间和两端的空格）
        String cleaned = hexString.replaceAll("\\s", "");

        // 验证字符串长度是否为偶数
        if (cleaned.length() % 2 != 0) {
            throw new IllegalArgumentException("无效的十六进制字符串长度: " + cleaned.length());
        }

        // 创建结果字节数组
        byte[] byteArray = new byte[cleaned.length() / 2];

        for (int i = 0; i < cleaned.length(); i += 2) {
            // 提取两个连续的十六进制字符
            String hexPair = cleaned.substring(i, i + 2);

            try {
                // 将十六进制字符串转换为字节
                byteArray[i / 2] = (byte) Integer.parseInt(hexPair, 16);
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException("无效的十六进制字符: " + hexPair);
            }
        }

        return byteArray;
    }

    public static void main(String[] args) {
        String input = "AA 55 13 04 01 88 88 02 C0 A8 09 09 0f 27 01 78 01 78 01 78 EE 27";  // 可以测试 "ab c5 ef" 或 "A B C 5 E F"

        try {
            byte[] result = hexStringToByteArray(input);

            // 格式化输出为 {0xAB, 0xC5, 0xEF} 形式
            StringBuilder sb = new StringBuilder("{");
            for (int i = 0; i < result.length; i++) {
                // 使用 & 0xFF 将字节转换为无符号整数
                sb.append(String.format("0x%02X", result[i] & 0xFF));
                if (i < result.length - 1) sb.append(", ");
            }
            sb.append("}");

            System.out.println("输入: \"" + input + "\"");
            System.out.println("十六进制数组: " + sb.toString());
            System.out.println("字节数组内容: " + Arrays.toString(result));

        } catch (IllegalArgumentException e) {
            System.err.println("错误: " + e.getMessage());
        }
    }

}
