How to convert hex to byte for the next program?

public static String asHex (byte buf[]) {
    StringBuffer strbuf = new StringBuffer(buf.length * 2);
    int i;

    for (i = 0; i < buf.length; i++) {
        if (((int) buf[i] & 0xff) < 0x10)
            strbuf.append("0");

        strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
    }

    return strbuf.toString();
}
+3
source share
2 answers

Here's the full program, which includes the function asBytes()that I assume you were looking for, the opposite asHex():

public class Temp {
    public static String asHex (byte buf[]) {
        StringBuffer strbuf = new StringBuffer(buf.length * 2);
        int i;
        for (i = 0; i < buf.length; i++) {
            if (((int) buf[i] & 0xff) < 0x10)
                strbuf.append("0");
            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
        }
       return strbuf.toString();
    }
    public static byte[] asBytes (String s) {
        String s2;
        byte[] b = new byte[s.length() / 2];
        int i;
        for (i = 0; i < s.length() / 2; i++) {
            s2 = s.substring(i * 2, i * 2 + 2);
            b[i] = (byte)(Integer.parseInt(s2, 16) & 0xff);
        }
        return b;
    }
    static public void main(String args[]) {
        byte[] b = Temp.asBytes("010203040506070809fdfeff");
        String s = Temp.asHex(b);
        System.out.println (s);
    }
}
+4
source

To get a hexadecimal string representation of a byte array, you can use String.format()with %X the format specifier :

public static String asHex(byte buf[]) 
{
    StringBuffer strbuf = new StringBuffer(buf.length * 2);

    for (byte b : buf)
       strbuf.append(String.format("%02X", b));

    return strbuf.toString();
}

The following method gives the inverse operation, returning a representation of the byte array of the hexadecimal string. It uses Byte.parseByte()some bit offset to get two characters in one byte:

public static byte[] asBytes(String str)
{
    if ((str.length() % 2) == 1) str = "0" + str; // pad leading 0 if needed
    byte[] buf = new byte[str.length() / 2];
    int i = 0;

    for (char c : str.toCharArray())
    {
        byte b = Byte.parseByte(String.valueOf(c), 16);
        buf[i/2] |= (b << (((i % 2) == 0) ? 4 : 0));
        i++;
    }

    return buf;
}
+1
source

Source: https://habr.com/ru/post/1703324/


All Articles