public static bool IsHexadecimalDigit(this byte value) { if (((int)value < 65 || (int)value > 70) && ((int)value < 97 || (int)value > 102)) { return(ByteExtensions.IsDigit(value)); } return(true); }
public HttpParser DecimalNumber(out uint?number) { if (!this.Success) { number = new uint?(); return(this); } IEnumerable <byte> source = Enumerable.TakeWhile <byte>(this.Range, (Func <byte, bool>)(value => ByteExtensions.IsDigit(value))); if (!Enumerable.Any <byte>(source)) { number = new uint?(); return(this.Fail()); } int num1 = Enumerable.Count <byte>(source); int num2 = Enumerable.Count <byte>(Enumerable.TakeWhile <byte>(source, (Func <byte, bool>)(value => (int)value == 48))); if (num1 - num2 > 9) { number = new uint?(); return(this.Fail()); } uint num3 = Enumerable.Aggregate <uint, uint>(Enumerable.Select <byte, uint>(source, (Func <byte, uint>)(value => (uint)value - 48U)), 0U, (Func <uint, uint, uint>)((accumulated, value) => 10U * accumulated + value)); number = new uint?(num3); this._offset += num1; return(this); }
public HttpParser DecimalNumber(int numDigits, out uint?number) { if (numDigits > 8 || numDigits < 0) { throw new ArgumentOutOfRangeException("numDigits", (object)numDigits, "Only between 0 and 8 digits are supported"); } if (!this.Success) { number = new uint?(); return(this); } IEnumerable <byte> source = Enumerable.TakeWhile <byte>(Enumerable.Take <byte>(this.Range, numDigits), (Func <byte, bool>)(value => ByteExtensions.IsDigit(value))); if (Enumerable.Count <byte>(source) != numDigits) { number = new uint?(); return(this.Fail()); } number = new uint?(Enumerable.Aggregate <uint, uint>(Enumerable.Select <byte, uint>(source, (Func <byte, uint>)(value => (uint)value - 48U)), 0U, (Func <uint, uint, uint>)((accumulated, value) => 10U * accumulated + value))); this._offset += numDigits; return(this); }