All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.subethamail.smtp.internal.util.HexUtils Maven / Gradle / Ivy

Go to download

A fork of a fork (!) of SubEtha, an easy-to-use server-side SMTP library for Java.

The newest version!
package org.subethamail.smtp.internal.util;

/**
 * Hex string manipulation utils.
 *
 * @author Diego Salvi
 */
public final class HexUtils {

    private static final char[] LOOKUP_TABLE =
            ("000102030405060708090A0B0C0D0E0F"
            + "101112131415161718191A1B1C1D1E1F"
            + "202122232425262728292A2B2C2D2E2F"
            + "303132333435363738393A3B3C3D3E3F"
            + "404142434445464748494A4B4C4D4E4F"
            + "505152535455565758595A5B5C5D5E5F"
            + "606162636465666768696A6B6C6D6E6F"
            + "707172737475767778797A7B7C7D7E7F"
            + "808182838485868788898A8B8C8D8E8F"
            + "909192939495969798999A9B9C9D9E9F"
            + "A0A1A2A3A4A5A6A7A8A9AAABACADAEAF"
            + "B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF"
            + "C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF"
            + "D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF"
            + "E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF"
            + "F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF").toCharArray();

    private HexUtils() {
        // prevent instantiation
    }

    /**
     * Convert a byte array into his hex representation.
     *
     * @param data byte array
     * @return hexadecimal string
     */
    public static String toHex(byte[] data) {
        return toHex(data, 0, data.length, null);
    }

    /**
     * Convert a byte array into his hex representation.
     *
     * @param data byte array
     * @param sep byte separator
     * @return hexadecimal string
     */
    public static String toHex(byte[] data, char sep) {
        return toHex(data, 0, data.length, sep);
    }

    /**
     * Convert a byte array into his hex representation.
     *
     * @param data byte array
     * @param off starting offset
     * @param len bytes to convert
     * @return hexadecimal string
     */
    public static String toHex(byte[] data, int off, int len) {
        return toHex(data, off, len, null);
    }

    /**
     * Convert a byte array into his hex representation.
     *
     * @param data byte array
     * @param off starting offset
     * @param len bytes to convert
     * @param sep (optional) byte separator
     * @return hexadecimal string
     */
    public static String toHex(byte[] data, int off, int len, Character sep) {
        if (len < 0) {
            throw new IllegalArgumentException("Invalid negative len " + len);
        }
        if (data.length < off) {
            throw new IllegalArgumentException(
                    "Invalid offset outside array: offset " + off + " array length " + data.length);
        }
        final int end = off + len;
        if (data.length < end) {
            throw new IllegalArgumentException(
                    "Invalid length outside array: offset " + off + " length " + len + " array length " + data.length);
        }
        if (len == 0) {
            return "";
        }
        final char[] result = sep == null ? new char[len << 1] : new char[(len << 1) + len - 1];
        int lookup;
        int i = 0;
        while (off < end) {
            lookup = (data[off++] & 0xFF) << 1;
            result[i++] = LOOKUP_TABLE[lookup];
            result[i++] = LOOKUP_TABLE[lookup + 1];
            if (sep != null && off < end) {
                result[i++] = sep;
            }
        }
        return new String(result);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy