6

Convert.ToString() 出于某种奇怪的原因仅允许基值 2、8、10 和 16;是否有一些模糊的方法可以提供 2 到 16 之间的任何基数?

4

6 回答 6

5

可能是为了消除键入 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;
}

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

于 2008-09-18T18:28:10.747 回答
1

你可以试试http://www.codeproject.com/KB/macros/Convert.aspx 。

于 2008-09-18T18:16:37.263 回答
0

您可以尝试以下方法:

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

这至少给人的印象是您可以拥有任何基础(从 2->16)。尽管我对您为什么要这样做感到有些困惑!

于 2008-09-18T18:19:39.470 回答
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
    }
于 2008-09-18T18:34:22.290 回答
0

对不起,我不是在回答你的问题,但是......基地的选择不是任意的。你的电脑不断地从基数 2(它是内部二进制系统)转换为人类可读的基数 10。基数 8 和 16 很容易与基数 2 相互转换,并且经常使用,因此计算机和人类可以读取值(例如 GUID)

于 2009-08-12T07:02:29.203 回答
-3
string foo = Convert.ToString(myint,base);

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

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

如果你想使用不同的基地,你可能是 SOL(但为什么???)。

于 2008-09-18T18:10:25.373 回答