如何在c#中實現這個python代碼?C中的任意大整數#
Python代碼:
print(str(int(str("e60f553e42aa44aebf1d6723b0be7541"), 16)))
結果:
305802052421002911840647389720929531201
但在C#我有一個很大的數字問題。
你能幫我嗎?
我在python和c#中有不同的結果。哪裏可以出錯?
如何在c#中實現這個python代碼?C中的任意大整數#
Python代碼:
print(str(int(str("e60f553e42aa44aebf1d6723b0be7541"), 16)))
結果:
305802052421002911840647389720929531201
但在C#我有一個很大的數字問題。
你能幫我嗎?
我在python和c#中有不同的結果。哪裏可以出錯?
如果你只是想能夠使用更大的數字有BigInteger
它有很多數字。
原始類型(如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的新數據類型。您不需要指定任何大小,因爲它將由數字本身推斷爲(這意味着您在執行時可能會得到OutOfMemoryException
,例如,兩個非常大的數字相乘)。
要回到你的問題,首先分析您的十六進制數字:
string bigNumberAsText = "e60f553e42aa44aebf1d6723b0be7541";
BigInteger bigNumber = BigInteger.Parse(bigNumberAsText,
NumberStyles.AllowHexSpecifier);
然後,只需打印到控制檯:
Console.WriteLine(bigNumber.ToString());
你可能有興趣來計算你需要多少位代表任意數字,使用這個函數(如果我記得原來的實現來自C Numerical Recipes):
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 2012-04-24 19:11:22