在C#中是否有任何内置方法将整数转换为字符串(任何基数)?

时间:2020-03-06 14:22:41  来源:igfitidea点击:

由于某些奇怪的原因,Convert.ToString()仅允许使用2、8、10和16的基本值。是否有某种晦涩的方式可以提供2到16之间的基数?

解决方案

string foo = Convert.ToString(myint,base);

http://msdn.microsoft.com/en-us/library/14kwkz77.aspx

编辑:我不好,除非我们传入指定的基数(2、8、10和16),否则这将引发参数异常。

如果我们想使用其他基准,则可能是SOL(但是为什么???)。

我们可以尝试http://www.codeproject.com/KB/macros/Convert.aspx。

我们可以尝试以下方法:

http://www.dotnetspider.com/resources/938-Conversion-Decimal-number-any-Base-vice.aspx

至少给人的印象是我们可以有任何底数(从2-> 16)。虽然我对我们为什么要有些困惑!

可以消除键入7而不是8的人,因为对任意基数的使用很少(但不存在)。

这是一个可以进行任意基本转换的示例方法。我们可以随意使用它,没有限制。

string ConvertToBase(int value, int toBase)
{
     if (toBase < 2 || toBase > 36) throw new ArgumentException("toBase");
     if (value < 0) throw new ArgumentException("value");

     if (value == 0) return "0"; //0 would skip while loop

     string AlphaCodes = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

     string retVal = "";

     while (value > 0)
     {
          retVal = AlphaCodes[value % toBase] + retVal;
          value /= toBase;
     }

     return retVal;
}

未经测试,但是我们应该能够从这里弄清楚。

//untested  -- public domain
// if you do a lot of conversions, using StringBuilder will be 
// much, much more efficient with memory and time than using string
// alone.

string toStringWithBase(int number, int base)
    { 
    if(0==number) //handle corner case
        return "0";
    if(base < 2)
        return "ERROR:  Base less than 2";

    StringBuilder buffer = new StringBuilder(); 

    bool negative = (number < 0) ? true : false;
    if(negative)
        {
        number=-number;
        buffer.Append('-');
        }

    int digits=0;
    int factor=1;

    int runningTotal=number;
    while(number > 0)
       {
       number = number/base;
       digits++;
       factor*=base;
       }
    factor = factor/base;

    while(factor >= 1)
       {
       int remainder = (number/factor) % base;

       Char out = '0'+remainder;
       if(remainder > 9)
           out = 'A' + remainder - 10;
       buffer.Append(out);
       factor = factor/base;
       }

    return buffer.ToString
    }

抱歉,我没有回答问题,但是...
碱的选择不是任意的。pc不断地从2进制(它的内部二进制系统)转换为人类可读的10进制。8和16进制非常容易在2进制之间进行转换,并且经常使用,因此计算机和人都可以读取该值(例如GUID)