private static string TryParseDigits(string s, ref int offset, bool eatDigits, out int result, out int numDigits) {
int offsetStart = offset;
int offsetEnd = s.Length;
int digit;
result = 0;
numDigits = 0;
while (offset < offsetEnd && s[offset] >= '0' && s[offset] <= '9') {
digit = s[offset] - '0';
if (result > (Int32.MaxValue - digit) / 10) {
if (!eatDigits) {
return Res.XmlConvert_Overflow;
}
// Skip past any remaining digits
numDigits = offset - offsetStart;
while (offset < offsetEnd && s[offset] >= '0' && s[offset] <= '9') {
offset++;
}
return null;
}
result = result * 10 + digit;
offset++;
}
numDigits = offset - offsetStart;
return null;
}
}