Convert a string representation of a hex dump to a byte array using Java? Convert a string representation of a hex dump to a byte array using Java? java java

Convert a string representation of a hex dump to a byte array using Java?


Here's a solution that I think is better than any posted so far:

/* s must be an even-length string. */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;}

Reasons why it is an improvement:

  • Safe with leading zeros (unlike BigInteger) and with negative byte values (unlike Byte.parseByte)

  • Doesn't convert the String into a char[], or create StringBuilder and String objects for every single byte.

  • No library dependencies that may not be available

Feel free to add argument checking via assert or exceptions if the argument is not known to be safe.


One-liners:

import javax.xml.bind.DatatypeConverter;public static String toHexString(byte[] array) {    return DatatypeConverter.printHexBinary(array);}public static byte[] toByteArray(String s) {    return DatatypeConverter.parseHexBinary(s);}

Warnings:

  • in Java 9 Jigsaw this is no longer part of the (default) java.se rootset so it will result in a ClassNotFoundException unless you specify--add-modules java.se.ee (thanks to @eckes)
  • Not available on Android (thanks to Fabian for noting that), but you can just take the source code if your system lacks javax.xml for some reason. Thanks to @Bert Regelink for extracting the source.


The Hex class in commons-codec should do that for you.

http://commons.apache.org/codec/

import org.apache.commons.codec.binary.Hex;...byte[] decoded = Hex.decodeHex("00A0BF");// 0x00 0xA0 0xBF