2

12122(基数3)をint値に変換しようとしています。

しかし、私はリフレクターで見ました-サポートされているベースは2,8,10,16

public static int ToInt32(string value, int fromBase)
{
    if (((fromBase != 2) && (fromBase != 8)) && ((fromBase != 10) && (fromBase != 0x10)))
    {
        throw new ArgumentException(Environment.GetResourceString("Arg_InvalidBase"));
    }
    return ParseNumbers.StringToInt(value, fromBase, 0x1000);
}

(私は彼らが2-8の間の4を逃したと思いますが気にしないでください....)

では、どうすれば基数3を基数10に変換できますか?(なぜ彼らはとにかくオプションを与えなかったのですか?...)

4

3 に答える 3

4

このリンクから

public static string IntToString(int value, char[] baseChars)
{
    string result = string.Empty;
    int targetBase = baseChars.Length;

    do
    {
        result = baseChars[value % targetBase] + result;
        value = value / targetBase;
    } 
    while (value > 0);

    return result;
}

次のように使用します

    string binary = IntToString(42, new char[] { '0', '1' });

    string base3 = IntToString(42, new char[] { '0', '1', '2' });

    // convert to hexadecimal
    string hex = IntToString(42, 
        new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                     'A', 'B', 'C', 'D', 'E', 'F'});
于 2012-05-10T14:36:02.303 に答える
0

これは、1〜9の塩基で、正の整数範囲で機能するはずです。

また、必要に応じて検証を追加します

int ConvertToInt(int number, int fromBase)
    {
        // Perform validations if necessary

        double result = 0;
        int digitIndex = 0;

        while (number > 0)
        {
            result += (number % 10) * Math.Pow(fromBase, digitIndex);

            digitIndex++;
            number /= 10;
        }

        return (int)result;
    }
于 2012-05-10T14:31:20.763 に答える
0

そのための.NETには何もありません。

これを使用できます(テストされていません)

static int ParseIntBase3(string s)
{
    int res = 0;
    for (int i = 0; i < s.Length; i++)
    {
        res = 3 * res + s[i] - '0';
    }
    return res;
}
于 2012-05-10T14:34:03.883 に答える