Enteros arbitrariamente grandes en C #

¿Cómo puedo implementar este código python en c #?

Código Python:

print(str(int(str("e60f553e42aa44aebf1d6723b0be7541"), 16))) 

Resultado:

 305802052421002911840647389720929531201 

Pero en c # tengo problemas con los dígitos grandes.

¿Me puedes ayudar?

Tengo diferentes resultados en python y c #. ¿Dónde puede haber error?

Related of "Enteros arbitrariamente grandes en C #"

Los tipos primitivos (como Int32 , Int64 ) tienen una longitud finita que no es suficiente para un número tan grande. Por ejemplo:

 Tipo de datos Valor máximo positivo
 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
 Su número 305,802,052,421,002,911,840,647,389,720,929,531,201

En este caso, para representar ese número necesitarías 128 bits. Con .NET Framework 4.0 hay un nuevo tipo de datos para números enteros de tamaño arbitrario System.Numerics.BigInteger . No es necesario que especifique ningún tamaño porque el número lo OutOfMemoryException (esto significa que incluso puede obtener una OutOfMemoryException cuando realice, por ejemplo, una multiplicación de dos números muy grandes).

Para volver a su pregunta, primero analice su número hexadecimal:

 string bigNumberAsText = "e60f553e42aa44aebf1d6723b0be7541"; BigInteger bigNumber = BigInteger.Parse(bigNumberAsText, NumberStyles.AllowHexSpecifier); 

Luego simplemente imprímelo en la consola:

 Console.WriteLine(bigNumber.ToString()); 

Quizás le interese calcular cuántos bits necesita para representar un número arbitrario, use esta función (si recuerdo bien, la implementación original proviene de C Recetas numéricas):

 public static uint GetNeededBitsToRepresentInteger(BigInteger value) { uint neededBits = 0; while (value != 0) { value >>= 1; ++neededBits; } return neededBits; } 

Luego, para calcular el tamaño requerido de un número escrito como cadena:

 public static uint GetNeededBitsToRepresentInteger(string value, NumberStyles numberStyle = NumberStyles.None) { return GetNeededBitsToRepresentInteger( BigInteger.Parse(value, numberStyle)); } 

Si solo quieres poder usar números más grandes, BigInteger tiene muchos dígitos.