Примитивные типы (такие как Int32
, Int64
) имеют конечную длину, которых недостаточно для такого большого числа. Например:
Data type Maximum positive value
Int32 2,147,483,647
UInt32 4,294,967,295
Int64 9,223,372,036,854,775,808
UInt64 18,446,744,073,709,551,615
Your number 305,802,052,421,002,911,840,647,389,720,929,531,201
В этом случае для представления этого числа вам потребуется 128 бит. С .NET Framework 4.0 существует новый тип данных для целых чисел произвольного размера System.Numerics.BigInteger. Вам не нужно указывать какой-либо размер, потому что это будет inferred самим номером (это означает, что вы можете даже получить OutOfMemoryException
, когда вы выполняете, например, умножение двух очень больших чисел).
Чтобы вернуться к вашему вопросу, первый разобрать ваш шестнадцатеричный номер:
string bigNumberAsText = "e60f553e42aa44aebf1d6723b0be7541";
BigInteger bigNumber = BigInteger.Parse(bigNumberAsText,
NumberStyles.AllowHexSpecifier);
Затем просто распечатать его на консоль:
Console.WriteLine(bigNumber.ToString());
Вы можете быть заинтересованы, чтобы подсчитать, сколько битов вам нужно представляют собой произвольное число, используйте эту функцию (если я хорошо помню, что исходная реализация исходит из C-числовых рецептов):
public static uint GetNeededBitsToRepresentInteger(BigInteger value)
{
uint neededBits = 0;
while (value != 0)
{
value >>= 1;
++neededBits;
}
return neededBits;
}
Затем рассчитать требуемый размер числа писал строки:
public static uint GetNeededBitsToRepresentInteger(string value,
NumberStyles numberStyle = NumberStyles.None)
{
return GetNeededBitsToRepresentInteger(
BigInteger.Parse(value, numberStyle));
}
Спасибо! Оно работает! Но возвращает неправильный результат, это вопрос времени. возможно ... =) – pic0