package com.hboxs.serialport.plc.util;

public class AsciiUtils {

    /**
     * Ascii字节数组转16进制字符串
     * @param data Ascii字节数组
     * @return 16进制字符串
     */
    public static String asciiByteArray2HexStr(byte[] data) {
        StringBuilder stringBuilder = new StringBuilder();

        if (data != null && data.length > 0) {
            for (byte b : data) {
                stringBuilder.append(Integer.toHexString(Integer.parseInt((char) (0xFF & b) + "", 16)).toUpperCase());
            }
        }
        return stringBuilder.toString();
    }

    /**
     * 将十六进制字符串转换为ASCII字符串
     *
     * @param hexString 十六进制字符串，例如 "48656c6c6f" 表示 "Hello"
     * @return 对应的ASCII字符串
     */
    public static String hexStringToAscii(String hexString) {
        StringBuilder asciiString = new StringBuilder();

        // 确保十六进制字符串的长度是偶数
        if (hexString.length() % 2 != 0) {
            throw new IllegalArgumentException("Invalid hex string length");
        }

        // 遍历十六进制字符串，每两个字符表示一个字节
        for (int i = 0; i < hexString.length(); i += 2) {
            // 获取两个十六进制字符组成的子字符串
            String hexChar = hexString.substring(i, i + 2);
            // 将十六进制子字符串转换为整数（字节）
            int asciiValue = Integer.parseInt(hexChar, 16);
            // 将整数（字节）转换为对应的ASCII字符并添加到结果字符串中
            asciiString.append((char) asciiValue);
        }

        return asciiString.toString();
    }

    public static void main(String[] args) {
        System.out.println(asciiByteArray2HexStr(new byte[]{0x30, 0x31}));
    }
}
