public static char HexUnescape (string pattern, ref int index)
{
if (pattern == null)
throw new ArgumentException ("pattern");
if (index < 0 || index >= pattern.Length)
throw new ArgumentOutOfRangeException ("index");
if (!IsHexEncoding (pattern, index))
return pattern [index++];
index++;
int msb = FromHex (pattern [index++]);
int lsb = FromHex (pattern [index++]);
return (char) ((msb << 4) | lsb);
}