code: public static byte[] decodeHex(char[] data) throws DecoderException {
  
          int len = data.length;
  
          if ((len & 0x01) != 0) {
              throw new DecoderException("Odd number of characters.");
          }
  
          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 hexidecimal 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 hexidecimal digits
  @return A byte array containing binary data decoded from
  the supplied char array.
  @throws DecoderException Thrown if an odd number or illegal of characters
  is supplied