在C#中,是否有内置的方法可以将整数转换为任意进制的字符串?

6

Convert.ToString()只允许使用2、8、10和16进制的基值,这似乎很奇怪;是否有一些不常见的方法可以提供2到16之间的任何进制?


进制的选择并非随意。你的个人电脑不断地从二进制(其内部二进制系统)转换为可读的十进制。八进制和十六进制非常容易转换为二进制,并且经常被使用,以便计算机和人类都能够读取值(例如GUID)。 - BWakaBats
3个回答

6

可能是为了避免有人将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;
}

未经测试,但你应该能够从这里理解。

0
//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
    }

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

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

编辑:我的错,除非您传入指定的进制(2、8、10和16),否则这将引发参数异常。

如果您想使用不同的进制,那么您可能会遇到困难(但为什么要这样做呢?)。


该方法仅支持2、8、10或16。 - Abe Heidebrecht
1
我认为您可能在原始问题中漏掉了一些重要的内容! - Steve Morgan
1
这就是Stackoverflow声誉迅速提升的结果,问题已经足够清晰明了! - Román

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接