Есть ли встроенный способ конвертировать целое число в строку (любой базы) в C #? - PullRequest
6 голосов
/ 18 сентября 2008

Convert.ToString () допускает только базовые значения 2, 8, 10 и 16 по какой-то странной причине; Есть ли какой-то неясный способ предоставления базы от 2 до 16?

Ответы [ 6 ]

5 голосов
/ 18 сентября 2008

Вероятно, чтобы исключить кого-то, набрав 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;
}

Не проверено, но вы сможете понять это отсюда.

1 голос
/ 18 сентября 2008

Вы можете попробовать http://www.codeproject.com/KB/macros/Convert.aspx.

0 голосов
/ 12 августа 2009

Извините, я не отвечаю на ваш вопрос, но ... Выбор основ не является произвольным. Ваш компьютер постоянно конвертирует из базы 2 (это внутренняя двоичная система) в базу 10, удобную для чтения человеком. Базу 8 и 16 очень легко конвертировать в базу 2 и обратно, и ее часто используют, чтобы компьютер И человек могли прочитать значение например, GUID)

0 голосов
/ 18 сентября 2008
//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
    }
0 голосов
/ 18 сентября 2008

Вы можете попробовать следующее:

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

Это, по крайней мере, создает впечатление, что вы можете иметь любую базу (от 2 до 16). Хотя я немного смущен тем, почему ты захочешь!

0 голосов
/ 18 сентября 2008
string foo = Convert.ToString(myint,base);

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

РЕДАКТИРОВАТЬ : Боже мой, это вызовет исключение аргумента, если вы не передадите указанные базы (2, 8, 10 и 16)

Ваш, вероятно, SOL, если вы хотите использовать другую базу (но почему ???).

...