code: public static byte[] decode(final char[] data) {
  
          final int len = data.length;
  
          final byte[] out = new byte[len >> 1];
  
          // two characters form the hex value.
          for (int i = 0, j = 0; j < len; i++) {
              int f = toDigit(data[j], j) << 4;
              j++;
              f = f | toDigit(data[j], j);
              j++;
              out[i] = (byte) (f & 0xFF);
          }
  
          return out;
      }
docs: Converts an array of characters representing hexadecimal values into an array of bytes of those same values. The
  returned array will be half the length of the passed array, as it takes two characters to represent any given
  byte. An exception is thrown if the passed char array has an odd number of elements.
  
  @param data
  An array of characters containing hexadecimal digits
  @return A byte array containing binary data decoded from the supplied char array.