package club.clubk.ktag.apps.core;

import java.util.regex.Pattern;

public class HexUtils {
    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len/2];

        for(int i = 0; i < len; i+=2){
            data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
        }

        return data;
    }

    public static byte[] hexStringToByteArray(String s, char delimiter) {
        s = s.replaceAll(Pattern.quote(String.valueOf(delimiter)), "");
        int len = s.length();
        byte[] data = new byte[len/2];

        for(int i = 0; i < len; i+=2){
            data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16));
        }

        return data;
    }

    final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

    public static String byteArrayToHexString(byte[] bytes) {
        char[] hexChars = new char[bytes.length*2];
        int v;

        for(int j=0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            hexChars[j*2] = hexArray[v>>>4];
            hexChars[j*2 + 1] = hexArray[v & 0x0F];
        }

        return new String(hexChars);
    }

    public static String byteArrayToHexString(byte[] bytes, char delimiter) {
        char[] hexChars = new char[(bytes.length*3) - 1];
        int v;

        for(int j=0; j < bytes.length; j++) {
            v = bytes[j] & 0xFF;
            if (j > 0)
            {
                hexChars[j*3 - 1] = delimiter;
            }
            hexChars[j*3] = hexArray[v>>>4];
            hexChars[j*3 + 1] = hexArray[v & 0x0F];
        }

        return new String(hexChars);
    }
}
