16 int num = ((-1 == radix) ? 10 : radix);
17 if (num != 2 && num != 10 && num != 8 && num != 16)
26 if ((flags & 0x1000) == 0 && (flags & 0x2000) == 0)
41 if (((uint)flags & 0x200u) != 0)
52 if ((radix == -1 || radix == 16) && i + 1 <
length &&
s[i] ==
'0' && (
s[i + 1] ==
'x' ||
s[i + 1] ==
'X'))
58 long num4 =
GrabLongs(num,
s, ref i, (flags & 0x200) != 0);
63 if (((uint)flags & 0x1000u) != 0 && i <
length)
68 if (num4 ==
long.MinValue && num2 == 1 && num == 10 && (flags & 0x200) == 0)
88 int num = ((-1 == radix) ? 10 : radix);
89 if (num != 2 && num != 10 && num != 8 && num != 16)
98 if ((flags & 0x1000) == 0 && (flags & 0x2000) == 0)
113 if (((uint)flags & 0x200u) != 0)
120 else if (
s[i] ==
'+')
124 if ((radix == -1 || radix == 16) && i + 1 <
length &&
s[i] ==
'0' && (
s[i + 1] ==
'x' ||
s[i + 1] ==
'X'))
130 int num4 =
GrabInts(num,
s, ref i, (flags & 0x200) != 0);
135 if (((uint)flags & 0x1000u) != 0 && i <
length)
140 if (((uint)flags & 0x400u) != 0)
142 if ((uint)num4 > 255u)
147 else if (((uint)flags & 0x800u) != 0)
149 if ((uint)num4 > 65535u)
154 else if (num4 ==
int.MinValue && num2 == 1 && num == 10 && (flags & 0x200) == 0)
165 public unsafe
static string IntToString(
int n,
int radix,
int width,
char paddingChar,
int flags)
168 if (radix < 2 || radix > 36)
177 num = (uint)((10 == radix) ? (-n) : n);
183 if (((uint)flags & 0x40u) != 0)
187 else if (((uint)flags & 0x80u) != 0)
200 for (
int i = 0; i < span.
Length; i++)
202 uint num3 = num / (uint)radix;
203 uint num4 = num - (uint)((
int)num3 * radix);
205 span[i] = ((num4 < 10) ? ((
char)(num4 + 48)) : ((char)(num4 + 97 - 10)));
213 if (radix != 10 && ((uint)flags & 0x20u) != 0)
231 else if (((uint)flags & 0x10u) != 0)
235 else if (((uint)flags & 8u) != 0)
240 string text =
string.FastAllocateString(
Math.
Max(width, num2));
241 fixed (
char* ptr =
text)
244 int num5 = text.Length - num2;
245 if (((uint)flags & (
true ? 1u : 0u)) != 0)
247 for (
int j = 0; j < num5; j++)
249 *(ptr2++) = paddingChar;
251 for (
int k = 0; k < num2; k++)
253 *(ptr2++) = span[num2 - k - 1];
258 for (
int l = 0; l < num2; l++)
260 *(ptr2++) = span[num2 - l - 1];
262 for (
int m = 0; m < num5; m++)
264 *(ptr2++) = paddingChar;
271 public unsafe
static string LongToString(
long n,
int radix,
int width,
char paddingChar,
int flags)
274 if (radix < 2 || radix > 36)
283 num = (ulong)((10 == radix) ? (-n) : n);
289 if (((uint)flags & 0x40u) != 0)
293 else if (((uint)flags & 0x80u) != 0)
297 else if (((uint)flags & 0x100u) != 0)
310 for (
int i = 0; i < span.
Length; i++)
312 ulong num3 = num / (ulong)radix;
313 int num4 = (int)((
long)num - (long)num3 * (
long)radix);
315 span[i] = ((num4 < 10) ? ((
char)(num4 + 48)) : ((char)(num4 + 97 - 10)));
323 if (radix != 10 && ((uint)flags & 0x20u) != 0)
334 else if (((uint)flags & 0x4000u) != 0)
337 span[num2++] = (char)(radix % 10 + 48);
338 span[num2++] = (char)(radix / 10 + 48);
347 else if (((uint)flags & 0x10u) != 0)
351 else if (((uint)flags & 8u) != 0)
356 string text =
string.FastAllocateString(
Math.
Max(width, num2));
357 fixed (
char* ptr =
text)
360 int num5 = text.Length - num2;
361 if (((uint)flags & (
true ? 1u : 0u)) != 0)
363 for (
int j = 0; j < num5; j++)
365 *(ptr2++) = paddingChar;
367 for (
int k = 0; k < num2; k++)
369 *(ptr2++) = span[num2 - k - 1];
374 for (
int l = 0; l < num2; l++)
376 *(ptr2++) = span[num2 - l - 1];
378 for (
int m = 0; m < num5; m++)
380 *(ptr2++) = paddingChar;
390 for (j = i; j < s.Length &&
char.IsWhiteSpace(
s[j]); j++)
399 if (radix == 10 && !isUnsigned)
401 ulong num2 = 922337203685477580uL;
403 while (i <
s.Length &&
IsDigit(
s[i], radix, out result))
405 if (num > num2 || (
long)num < 0
L)
409 num = (ulong)((
long)num * (long)radix + result);
412 if ((
long)num < 0
L && num != 9223372036854775808uL)
419 ulong num2 = radix
switch
421 8 => 2305843009213693951uL,
422 16 => 1152921504606846975uL,
423 10 => 1844674407370955161uL,
424 _ => 9223372036854775807uL,
427 while (i <
s.Length &&
IsDigit(
s[i], radix, out result2))
433 ulong num3 = (ulong)((
long)num * (long)radix + result2);
448 if (radix == 10 && !isUnsigned)
450 uint num2 = 214748364u;
452 while (i <
s.Length &&
IsDigit(
s[i], radix, out result))
454 if (num > num2 || (
int)num < 0)
458 num = (uint)((
int)num * radix + result);
461 if ((
int)num < 0 && num != 2147483648u)
468 uint num2 = radix
switch
476 while (i <
s.Length &&
IsDigit(
s[i], radix, out result2))
482 uint num3 = (uint)((
int)num * radix + result2);
495 private static bool IsDigit(
char c,
int radix, out
int result)
510 num = (result = c - 48);
538 num = (result = c - 65 + 10);
566 num = (result = c - 97 + 10);
static byte Max(byte val1, byte val2)
static void ThrowOverflowException(TypeCode type)
static int StringToInt(ReadOnlySpan< char > s, int radix, int flags, ref int currPos)
static long GrabLongs(int radix, ReadOnlySpan< char > s, ref int i, bool isUnsigned)
static unsafe string LongToString(long n, int radix, int width, char paddingChar, int flags)
static long StringToLong(ReadOnlySpan< char > s, int radix, int flags)
static int GrabInts(int radix, ReadOnlySpan< char > s, ref int i, bool isUnsigned)
static bool IsDigit(char c, int radix, out int result)
static void EatWhiteSpace(ReadOnlySpan< char > s, ref int i)
static unsafe string IntToString(int n, int radix, int width, char paddingChar, int flags)
static int StringToInt(ReadOnlySpan< char > s, int radix, int flags)
static long StringToLong(ReadOnlySpan< char > s, int radix, int flags, ref int currPos)
static string ArgumentOutOfRange_Index
static string Format_ExtraJunkAtEnd
static string Arg_InvalidBase
static string Overflow_NegativeUnsigned
static string Format_EmptyInputString
static string Arg_CannotHaveNegativeValue
static string Format_NoParsibleDigits