public static byte[] ASCIIHexDecode(byte[] inb) { MemoryStream ostr = new MemoryStream(); bool first = true; int n1 = 0; for (int k = 0; k < inb.Length; ++k) { int ch = inb[k] & 0xff; if (ch == '>') { break; } if (PRTokeniser.isWhitespace(ch)) { continue; } int n = PRTokeniser.getHex(ch); if (n == -1) { throw new RuntimeException("Illegal character in ASCIIHexDecode."); } if (first) { n1 = n; } else { ostr.WriteByte((byte)((n1 << 4) + n)); } first = !first; } if (!first) { ostr.WriteByte((byte)(n1 << 4)); } return(ostr.ToArray()); }
/** Decodes an escaped name in the form "/AB#20CD" into "AB CD". * @param name the name to decode * @return the decoded name */ public static string decodeName(string name) { StringBuilder buf = new StringBuilder(); try { int len = name.Length; for (int k = 1; k < len; ++k) { char c = name[k]; if (c == '#') { c = (char)((PRTokeniser.getHex(name[k + 1]) << 4) + PRTokeniser.getHex(name[k + 2])); k += 2; } buf.Append(c); } } catch (Exception e) { e.GetType(); // empty on purpose } return(buf.ToString()); }