一尘不染

如何在不使用ToString()的情况下将Int转换为C#中的字符串?

algorithm

在不使用任何本机toString功能的情况下,将以下int参数转换为字符串。

public string integerToString(int integerPassedIn){  
    //Your code here
}

因为从一切继承ObjectObjectToString()方法你会如何转换的int一个string不使用本地ToString()方法?

字符串连接的问题在于它将调用ToString()该链,直到它到达一个或到达Object类为止。

如何在不使用C#的情况下将整数转换为字符串ToString()


阅读 138

收藏
2020-07-28

共1个答案

一尘不染

像这样:

public string IntToString(int a)
{    
    var chars = new[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    var str = string.Empty;
    if (a == 0)
    {
        str = chars[0];
    }
    else if (a == int.MinValue)
    {
        str = "-2147483648";
    }
    else
    {
        bool isNegative = (a < 0);
        if (isNegative)
        {
            a = -a;
        }

        while (a > 0)
        {
            str = chars[a % 10] + str;
            a /= 10;
        }

        if (isNegative)
        {
            str = "-" + str;
        }
    }

    return str;
}

更新:
这是另一个较短的版本,应该会表现更好,因为它消除了所有字符串连接,而有利于操纵定长数组。它支持的最大基数为16,但是很容易将其扩展到更高的基数。可能需要进一步改进:

public string IntToString(int a, int radix)
{
    var chars = "0123456789ABCDEF".ToCharArray();
    var str = new char[32]; // maximum number of chars in any base
    var i = str.Length;
    bool isNegative = (a < 0);
    if (a <= 0) // handles 0 and int.MinValue special cases
    {
        str[--i] = chars[-(a % radix)];
        a = -(a / radix);
    }

    while (a != 0)
    {
        str[--i] = chars[a % radix];
        a /= radix;
    }

    if (isNegative)
    {
        str[--i] = '-';
    }

    return new string(str, i, str.Length - i);
}
2020-07-28