434 {
435 int digits = 0;
437 if (c == 'x' || c == 'X')
438 {
440 }
441 if (
value._bits ==
null)
442 {
443 if (c == 'g' || c == 'G' || c == 'r' || c == 'R')
444 {
445 formatSpan = (formatString = ((digits > 0) ? $"D{digits}" : "D"));
446 }
447 if (targetSpan)
448 {
450 return null;
451 }
452 charsWritten = 0;
453 spanSuccess = false;
455 }
456 int num =
value._bits.Length;
458 int num3;
459 int num4;
460 checked
461 {
462 int num2;
463 try
464 {
465 num2 = unchecked(checked(num * 10) / 9) + 2;
466 }
467 catch (OverflowException innerException)
468 {
470 }
471 array =
new uint[num2];
472 num3 = 0;
473 num4 = num;
474 }
475 while (--num4 >= 0)
476 {
477 uint num5 =
value._bits[num4];
478 for (
int i = 0;
i < num3;
i++)
479 {
480 ulong num6 = NumericsHelpers.MakeUlong(
array[i], num5);
481 array[
i] = (uint)(num6 % 1000000000);
482 num5 = (uint)(num6 / 1000000000);
483 }
484 if (num5 != 0)
485 {
486 array[num3++] = num5 % 1000000000;
487 num5 /= 1000000000;
488 if (num5 != 0)
489 {
490 array[num3++] = num5;
491 }
492 }
493 }
494 int num7;
495 bool flag;
496 char[] array2;
497 int num9;
498 checked
499 {
500 try
501 {
502 num7 = num3 * 9;
503 }
504 catch (OverflowException innerException2)
505 {
507 }
508 flag = c == 'g' || c == 'G' || c == 'd' || c == 'D' || c == 'r' || c == 'R';
509 if (flag)
510 {
511 if (digits > 0 && digits > num7)
512 {
513 num7 = digits;
514 }
516 {
517 try
518 {
519 num7 +=
info.NegativeSign.Length;
520 }
521 catch (OverflowException innerException3)
522 {
524 }
525 }
526 }
527 int num8;
528 try
529 {
530 num8 = num7 + 1;
531 }
532 catch (OverflowException innerException4)
533 {
535 }
536 array2 = new char[num8];
537 num9 = num7;
538 }
539 for (int j = 0; j < num3 - 1; j++)
540 {
541 uint num10 =
array[j];
542 int num11 = 9;
543 while (--num11 >= 0)
544 {
545 array2[--num9] = (char)(48 + num10 % 10);
546 num10 /= 10;
547 }
548 }
549 for (uint num12 =
array[num3 - 1]; num12 != 0; num12 /= 10)
550 {
551 array2[--num9] = (char)(48 + num12 % 10);
552 }
553 if (!flag)
554 {
555 bool sign = value._sign < 0;
556 int precision = 29;
557 int scale = num7 - num9;
558 Span<char> initialBuffer = stackalloc char[128];
561 if (targetSpan)
562 {
563 spanSuccess = sb.TryCopyTo(
destination, out charsWritten);
564 return null;
565 }
566 charsWritten = 0;
567 spanSuccess = false;
568 return sb.ToString();
569 }
570 int num13 = num7 - num9;
571 while (digits > 0 && digits > num13)
572 {
573 array2[--num9] = '0';
574 digits--;
575 }
577 {
578 string negativeSign =
info.NegativeSign;
579 for (int num14 = negativeSign.Length - 1; num14 > -1; num14--)
580 {
581 array2[--num9] = negativeSign[num14];
582 }
583 }
584 int num15 = num7 - num9;
585 if (!targetSpan)
586 {
587 charsWritten = 0;
588 spanSuccess = false;
589 return new string(array2, num9, num7 - num9);
590 }
591 if (
new ReadOnlySpan<char>(array2, num9, num7 - num9).TryCopyTo(
destination))
592 {
593 charsWritten = num15;
594 spanSuccess = true;
595 return null;
596 }
597 charsWritten = 0;
598 spanSuccess = false;
599 return null;
600 }
static char ParseFormatSpecifier(ReadOnlySpan< char > format, out int digits)
static string FormatBigIntegerToHex(bool targetSpan, BigInteger value, char format, int digits, NumberFormatInfo info, Span< char > destination, out int charsWritten, out bool spanSuccess)
static string Format_TooLarge
override string ToString()