7

Javaでは、私はできる

//Parsing Octal String
BigInteger b = new BigInteger("16304103460644701340432043410021040424210140423204",8);

次に、好きなようにフォーマットします

b.toString(2); //2 for binary
b.toString(10); //10 for decimal
b.toString(16); //16 for hexadecimal

C#BigIntegerは上記のフォーマット機能を提供しますが、BIIIG (64 ビットを超える、符号なし) 8 進値を解析する方法が見つからないようです。

4

2 に答える 2

3

16 進数 (および 16 までのすべての基数) の単純な実装。文字列定数に文字を追加して展開します(クレジットが必要な場合はクレジット。これはダグラスの回答に基づいています):

private const string digits = "0123456789ABCDEF";
private readonly Dictionary<char, BigInteger> values
    = digits.ToDictionary(c => c, c => (BigInteger)digits.IndexOf(c));
public BigInteger ParseBigInteger(string value, BigInteger baseOfValue)
{
    return value.Aggregate(
        new BigInteger,
        (current, digit) => current * baseOfValue + values[digit]);
}

1 つのオペランドが int である演算は、両方のオペランドが BigInteger である場合よりも高速である可能性があります。その場合:

private readonly Dictionary<char, int> values
    = digits.ToDictionary(c => c, c => digits.IndexOf(c));
public BigInteger ParseBigInteger(string value, int baseOfValue)
{
    return value.Aggregate(
        new BigInteger,
        (current, digit) => current * baseOfValue + values[digit]);
}
于 2012-12-26T14:19:47.480 に答える