Beispiel #1
0
 public static bool IsHexEncoding(string pattern, int index)
 {
     return(index + 3 <= pattern.Length && (pattern[index++] == '%' && Uri.IsHexDigit(pattern[index++])) && Uri.IsHexDigit(pattern[index]));
 }
Beispiel #2
0
        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;
        }