code: public static int binHexToBytes(String sBinHex, byte[] data, int nSrcPos, int nDstPos, int nNumOfBytes) {
  	// check for correct ranges
  	int nStrLen = sBinHex.length();
  	int nAvailBytes = (nStrLen - nSrcPos) >> 1;
  	if (nAvailBytes < nNumOfBytes) nNumOfBytes = nAvailBytes;
  	int nOutputCapacity = data.length - nDstPos;
  	if (nNumOfBytes > nOutputCapacity) nNumOfBytes = nOutputCapacity;
  	// convert now
  	int nResult = 0;
  	for (int nI = 0; nI < nNumOfBytes; nI++) {
  	    byte bActByte = 0;
  	    boolean blConvertOK = true;
  	    for (int nJ = 0; nJ < 2; nJ++) {
  		bActByte <<= 4;
  		char cActChar = sBinHex.charAt(nSrcPos++);
  		if ((cActChar >= 'a') && (cActChar <= 'f')) bActByte |= (byte) (cActChar - 'a') + 10;
  		else if ((cActChar >= '0') && (cActChar <= '9')) bActByte |= (byte) (cActChar - '0');
  		else blConvertOK = false;
  	    }
  	    if (blConvertOK) {
  		data[nDstPos++] = bActByte;
  		nResult++;
  	    }
  	}
  	return nResult;
      }
docs: converts a binhex string back into a byte array (invalid codes will be skipped)
  
  @param sBinHex binhex string
  @param data the target array
  @param nSrcPos from which character in the string the conversion should begin, remember that
  (nSrcPos modulo 2) should equals 0 normally
  @param nDstPos to store the bytes from which position in the array
  @param nNumOfBytes number of bytes to extract
  @return number of extracted bytes