【问题标题】:How to Parse string into BigInteger?如何将字符串解析为 BigInteger?
【发布时间】:2013-06-11 20:54:50
【问题描述】:

我正在写我的密码学领域的工作,今天我试图从字符串中获取一个 BigInteger 数字。但我发现从字符串中获取 BigInteger 数字的唯一方法是

UTF8Encoding Encoding = new UTF8Encoding();
var bytes = Encoding.GetBytes(myString);
var myBigInteger = new BigInteger(bytes);

但这不是我需要的那种方式。我需要一些能够准确返回字符串的 BigInteger 表示形式的东西。例如,如果我有

var myString = "1234567890";

我希望我的 BigInteger 是

BigInteger bi = 1234567890;

【问题讨论】:

  • 我已更改标题以匹配您的问题(原为:“如何从BigInteger 获取字符串”,与帖子完全相反)...

标签: c# string biginteger


【解决方案1】:

您可以使用该类型的 Parse 方法。

BigInteger.Parse(string value)

它是静态的。你传递一个字符串,得到对应的值。

例如:

BigInteger reallyBigNumber = BigInteger.Parse("12347534159895123");

【讨论】:

  • 谢谢!我完全忘记了这个=)
【解决方案2】:

我认为 TryParse 是您想要的方式:

BigInteger number1;
bool succeeded1 = BigInteger.TryParse("-12347534159895123", out number1);

如果您传递无效值,这不会引发异常。如果输入字符串不转换,它只会将数字设置为 0。我相信它也比 Parse 更快。

http://msdn.microsoft.com/en-us/library/dd268301.aspx

【讨论】:

  • 它不应该更快,因为它在内部使用Parse。它基本上使用 try-catch 块,在 try 块中返回 true,在 catch 中返回 false
  • @Abe 为什么你认为 TryParse 比 Parse 方法快?
  • 我不久前在某处读过它。这是一个很好的 SO 问题,其中接受的答案实际上显示了性能差异:stackoverflow.com/questions/150114/…
  • @Renan,您有任何可以发布的资源来支持您所说的话吗?不是想成为一个聪明的驴子,只是想知道你从哪里得到这个。
  • @AbeMiessler 很久以前在 ILSpy 上坐立不安时,我注意到所有数字类型都有一个模式。我可能错了,不幸的是,微软提供的最新 .NET 源代码似乎不包括这种类型。所以我不能支持我说的话:(请忽略它。
【解决方案3】:
BigInteger bi = BigInteger.Parse("1234567890");

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 2012-07-01
    • 2017-04-15
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    相关资源
    最近更新 更多