6

Convert.ToString() は、奇妙な理由で 2、8、10、および 16 の基本値のみを許可します。2 から 16 までの基数を提供するあいまいな方法はありますか?

4

6 に答える 6

5

おそらく、誰かが 8 ではなく 7 を入力するのを排除するためでしょう。任意の基数の使用はほとんどないためです (存在しないわけではありません)。

以下は、任意の基数変換を実行できるメソッドの例です。好きなだけ制限なく使えます。

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

次のことを試すことができます。

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

これは、少なくとも任意のベース (2->16) を持つことができるという印象を与えます。なぜあなたがしたいのかについて私は少し混乱していますが!

于 2008-09-18T18:19:39.470 に答える
0

申し訳ありませんが、私はあなたの質問に答えていませんが... 塩基の選択は恣意的ではありません。あなたのPCは、底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 に答える