code: public static String bytesToHex(byte[] bytes, String separator) {
          StringBuilder tmpBuffer = new StringBuilder();
          if (bytes != null) {
              for (byte c : bytes) {
                  int b = c;
                  if (b < 0)
                      b += 256;
                  if (separator != null)
                      tmpBuffer.append(separator);
                  tmpBuffer.append(HEX_CHARS[(b & 0xf0) / 0x10]); // note, this benchmarks faster than using >> 4
                  tmpBuffer.append(HEX_CHARS[b & 0x0f]);
              }
          }
          return tmpBuffer.toString();
      }
docs: translate a byte array of raw data into a String with a hex representation of that data.
  Each octet will be separated with a specific separator.
  
  @param bytes raw binary data
  @param separator This string will be injected into the output in between each octet in the stream
  
  @return String Hex representation of the raw data with each octet separated by 'separator'