【发布时间】:2012-04-30 06:26:06
【问题描述】:
我正在尝试在 C# 中将一个大数字(例如:9407524828459565063)转换为十六进制(例如:828E3DFD00000000)。
问题是数字大于Int64的最大值。
我到处查找,找不到可行的解决方案。
这里有什么帮助吗?
谢谢。
【问题讨论】:
-
如果它大于 int64,你如何接收它?文字?
我正在尝试在 C# 中将一个大数字(例如:9407524828459565063)转换为十六进制(例如:828E3DFD00000000)。
问题是数字大于Int64的最大值。
我到处查找,找不到可行的解决方案。
这里有什么帮助吗?
谢谢。
【问题讨论】:
我会使用 System.Numerics.BigInteger 类来执行此操作。确切的解决方案取决于您拥有此数字的格式:字符串、双精度、其他。
如果字符串(s):
var bigInt = BigInteger.Parse(s);
var hexString = bigInt.ToString("x");
如果双倍 (d):
var bigInt = new BigInteger(d);
var hexString = bigInt.ToString("x");
...等等。
【讨论】:
BigInteger.ToString("X") 有时会添加一个前导零。我创建了扩展方法来转换为不包含任何前导零的十六进制、二进制和八进制(请参阅:stackoverflow.com/questions/14048476/#15447131)。
如果您使用的是 .NET 4.0,您可能会查看 BigInteger 类:
http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx
BigInteger bi = new BigInteger();
bi = 9407524828459565063;
string bix = bi.ToString("X");
【讨论】:
也许:
BigInteger b = 9407524828459565063;
var hex = b.ToString("X2");
或者
ulong l = 9407524828459565063;
var hex = l.ToString("X2");
【讨论】: