public static byte[] decodeHex(final char[] data){
  final int len=data.length;
  if ((len & 0x01) != 0) {
    throw new IllegalArgumentException("Odd number of characters.");
  }
  final byte[] out=new byte[len >> 1];
  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;
}

public static byte [ ] decodeHex ( final char [ ] data ) { final int len = data . length ; if ( ( len & 0x01 ) != 0 ) { throw new IllegalArgumentException ( "Odd number of characters." ) ; } final byte [ ] out = new byte [ len > > 1 ] ; 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 ; }
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 .
