Loại nguyên thủy (chẳng hạn như Int32
, Int64
) có độ dài hữu hạn là không đủ cho số lượng lớn như vậy. Ví dụ:
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
Trong trường hợp này đại diện cho số đó bạn cần 128 bit. Với .NET Framework 4.0, có một kiểu dữ liệu mới cho số nguyên có kích thước tùy ý System.Numerics.BigInteger. Bạn không cần chỉ định bất kỳ kích thước nào vì nó sẽ là phỏng đoán theo chính số đó (điều đó có nghĩa là bạn thậm chí có thể nhận được số OutOfMemoryException
khi bạn thực hiện, ví dụ: nhân hai số rất lớn).
Để trở lại câu hỏi của bạn, đầu tiên phân tích số thập lục phân của bạn:
string bigNumberAsText = "e60f553e42aa44aebf1d6723b0be7541";
BigInteger bigNumber = BigInteger.Parse(bigNumberAsText,
NumberStyles.AllowHexSpecifier);
Sau đó chỉ cần in nó để an ủi:
Console.WriteLine(bigNumber.ToString());
Bạn có thể quan tâm để tính toán bao nhiêu bit bạn cần đại diện cho một số tùy ý, sử dụng chức năng này (nếu tôi nhớ thực hiện ban đầu tốt đến từ C Numerical Recipes):
public static uint GetNeededBitsToRepresentInteger(BigInteger value)
{
uint neededBits = 0;
while (value != 0)
{
value >>= 1;
++neededBits;
}
return neededBits;
}
Sau đó, để tính toán kích thước yêu cầu của một số được viết dưới dạng chuỗi:
public static uint GetNeededBitsToRepresentInteger(string value,
NumberStyles numberStyle = NumberStyles.None)
{
return GetNeededBitsToRepresentInteger(
BigInteger.Parse(value, numberStyle));
}
Cảm ơn bạn! Nó hoạt động! Nhưng trả về kết quả sai, đó là câu hỏi về thời gian. có lẽ ... =) – pic0