Как преобразовать gi-normous целое число (в формате строки) для преобразовывания формата в шестнадцатеричную систему? (C#)

Учитывая потенциально огромное целочисленное значение (в формате строки C#), я хочу смочь генерировать его шестнадцатеричный эквивалент. Нормальные методы не применяются здесь, поскольку мы говорим произвольно большие количества, 50 цифр или больше. Методы я видел который использование техника как это:

// Store integer 182
int decValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = decValue.ToString("X");
// Convert the hex string back to the number
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

не будет работать, потому что целое число для преобразования является слишком большим.

Например, я должен смочь преобразовать строку как это:

843370923007003347112437570992242323

к его шестнадцатеричному эквиваленту.

они не работают:

C# преобразовывают целое число, чтобы преобразовать в шестнадцатеричную систему и отступить снова Как преобразовать числа между шестнадцатеричным и десятичным в C#?

17
задан Community 23 May 2017 в 12:34
поделиться

3 ответа

О, это просто:

        var s = "843370923007003347112437570992242323";
        var result = new List<byte>();
        result.Add( 0 );
        foreach ( char c in s )
        {
            int val = (int)( c - '0' );
            for ( int i = 0 ; i < result.Count ; i++ )
            {
                int digit = result[i] * 10 + val;
                result[i] = (byte)( digit & 0x0F );
                val = digit >> 4;
            }
            if ( val != 0 )
                result.Add( (byte)val );
        }

        var hex = "";
        foreach ( byte b in result )
            hex = "0123456789ABCDEF"[ b ] + hex;
23
ответ дан 30 November 2019 в 12:13
поделиться

Как сказал Йенс, взгляните на реализацию BigInt в Code Project . Даже если у них нет функции для преобразования в шестнадцатеричный формат, вы могли бы легко написать функцию , чтобы сделать это самостоятельно, если этот BigInt имеет операцию деления и по модулю (я не думаю, что у него есть по модулю, поэтому вам также нужно будет написать по модулю самостоятельно)

2
ответ дан 30 November 2019 в 12:13
поделиться

Используйте BigInteger для хранения целого числа, а затем используйте .ToString ("X") на этом объекте.

Пример:

var number = BigInteger.Parse("843370923007003347112437570992242323");
string hexValue = number.ToString("X");

Однако это ограничено .NET 4 и новее. Но Йенс А. указал на класс BigInteger в кодовом проекте , этот класс содержит метод с именем ToHexString , так что он будет работать для сценария <.NET 4.

7
ответ дан 30 November 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: