C# 如何在不使用convert.to()方法的情况下将基数为10的负数转换为基数为8的转换?

C# 如何在不使用convert.to()方法的情况下将基数为10的负数转换为基数为8的转换?,c#,.net,algorithm,type-conversion,base-conversion,C#,.net,Algorithm,Type Conversion,Base Conversion,如果不使用Convert.To()方法,如何以八进制表示十进制负数 public static string GetOctal(int number) { int base = 8; } 例如: -3(基数10)=37775(基数8) 但是我应该使用什么算法来得到这个结果呢 以下是我的任务的测试用例: [TestCase(-3, 8, ExpectedResult = "37777777775")] [TestCase

如果不使用
Convert.To()
方法,如何以八进制表示十进制负数

public static string GetOctal(int number)
{     
   int base = 8;    
}
例如:

-3(基数10)=37775(基数8)

但是我应该使用什么算法来得到这个结果呢

以下是我的任务的测试用例:

        [TestCase(-3, 8, ExpectedResult = "37777777775")]
        [TestCase(-127, 8, ExpectedResult = "37777777601")]
        [TestCase(-675432, 8, ExpectedResult = "37775330630")]
        [TestCase(-1908345, 8, ExpectedResult = "37770560607")]
        [TestCase(int.MinValue, 8, ExpectedResult = "20000000000")]
        [TestCase(-3, 16, ExpectedResult = "FFFFFFFD")]
        [TestCase(-127, 16, ExpectedResult = "FFFFFF81")]
        [TestCase(-675432, 16, ExpectedResult = "FFF5B198")]
        [TestCase(-1908345, 16, ExpectedResult = "FFE2E187")]
        [TestCase(int.MinValue, 16, ExpectedResult = "80000000")]
        [TestCase(1908345, 10, ExpectedResult = "1908345")]
        [TestCase(int.MaxValue, 10, ExpectedResult = "2147483647")]
        public string GetRadix_Tests(int number, int radix) => number.GetRadix(radix);

您始终可以在source.dot.net上找到
Convert
类的源代码,并遵循
ParseNumber
IntToString
方法:


这回答了你的问题吗
37775
(八进制)不是负数(这也是八进制中的
-3
)。所以,这可能是转换后的
(uint)数字。@Klaus Gütter,请看我看到的测试用例added@Fabjan不,因为没有转换带符号负数的算法。@Aliaksandrafiaruski也根据测试用例,似乎预期的结果是将
(uint)number
转换为给定的基数。因此,转换本身不必处理负数。
public static string IntToString(int n, int radix, int width, char paddingChar, int flags)
{
    Span<char> buffer = stackalloc char[66]; // Longest possible string length for an integer in binary notation with prefix

    if (radix < MinRadix || radix > MaxRadix)
        throw new ArgumentException(SR.Arg_InvalidBase, nameof(radix));

    // If the number is negative, make it positive and remember the sign.
    // If the number is MIN_VALUE, this will still be negative, so we'll have to
    // special case this later.
    bool isNegative = false;
    uint l;
    if (n < 0)
    {
        isNegative = true;
    (...)