Учитывая потенциально огромное целочисленное значение (в формате строки 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#?
О, это просто:
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;
Как сказал Йенс, взгляните на реализацию BigInt в Code Project . Даже если у них нет функции для преобразования в шестнадцатеричный формат, вы могли бы легко написать функцию , чтобы сделать это самостоятельно, если этот BigInt имеет операцию деления и по модулю (я не думаю, что у него есть по модулю, поэтому вам также нужно будет написать по модулю самостоятельно)
Используйте BigInteger для хранения целого числа, а затем используйте .ToString ("X") на этом объекте.
Пример:
var number = BigInteger.Parse("843370923007003347112437570992242323");
string hexValue = number.ToString("X");
Однако это ограничено .NET 4 и новее. Но Йенс А. указал на класс BigInteger в кодовом проекте , этот класс содержит метод с именем ToHexString
, так что он будет работать для сценария <.NET 4.