public static bool IsHexEncoding(string pattern, int index) { return(index + 3 <= pattern.Length && (pattern[index++] == '%' && Uri.IsHexDigit(pattern[index++])) && Uri.IsHexDigit(pattern[index])); }
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"); } int num = 0; int num2 = 0; while (index + 3 <= pattern.Length && pattern[index] == '%' && Uri.IsHexDigit(pattern[index + 1]) && Uri.IsHexDigit(pattern[index + 2])) { index++; int num3 = Uri.FromHex(pattern[index++]); int num4 = Uri.FromHex(pattern[index++]); int num5 = (num3 << 4) + num4; if (num == 0) { if (num5 < 192) { return((char)num5); } if (num5 < 224) { num2 = num5 - 192; num = 2; } else if (num5 < 240) { num2 = num5 - 224; num = 3; } else if (num5 < 248) { num2 = num5 - 240; num = 4; } else if (num5 < 251) { num2 = num5 - 248; num = 5; } else if (num5 < 254) { num2 = num5 - 252; num = 6; } num2 <<= (num - 1) * 6; } else { num2 += num5 - 128 << (num - 1) * 6; } num--; if (num <= 0) { IL_1A2: return((char)num2); } } if (num == 0) { return(pattern[index++]); } goto IL_1A2; }