【问题标题】:Hex to int C# with VERY big numbers十六进制到整数 C# 非常大的数字
【发布时间】:2011-09-23 19:21:17
【问题描述】:

我有一个 256 字符长的字符串,其中包含一个十六进制值:

EC851A69B8ACD843164E10CFF70CF9E86DC2FEE3CF6F374B43C854E3342A2F1AC3E30C741CC41E679DF6D07CE6FA3A66083EC9B8C8BF3AF05D8BDBB0AA6CB3EF8C5BAA2A5E531BA9E28592F99E0FE4F95169A6C63F635D0197E325C5EC76219B907E4EBDCD401FB1986E4E3CA661FF73E7E2B8FD9988E753B7042B2BBCA76679 P>

我想把它转换成这样的数字字符串:

102721434037452409244947064576168505707480035762262934026941212181473785225928879178124028140134582697986427982801088884553965371786856967476796072433168989860379885762727214550528198941038582937788145880903882293999022181847665735412629158069472562567144696160522107094738216218810820997773451212693036210879 P>

这么大的数字怎么办?

提前致谢。

【问题讨论】:

  • 如果结果应该是小数这将是166089946137986168535368849184301740204613753693156360462575217560130904921953976324839782808018277000296027060873747803291797869684516494894741699267674246881622658654267131250470956587908385447044319923040838072975636163137212887824248575510341104029461758594855159174329892125993844566497176102668262139513。跨度>
  • 无符号,十进制值是(负)-13679367348245422237561669894600733157183944201074296810854863597601770883546986807868694514389259020824086818997645554366991899129900127598105731371799877496145234770598354025831263013337708672408763029044167695862514519205249993649664535030486133133888752089731139065617353812485871738338180226955961997703 跨度>

标签: c# biginteger valueconverter


【解决方案1】:

使用BigInteger。具体来说,您可以使用BigInteger.Parse 将十六进制表示解析为BigInteger 的实例(使用NumberStyles.HexNumber),然后BigInteger.ToString 得到十进制表示。

var number = BigInteger.Parse(
    "EC851A69B8ACD843164E10CFF70CF9E86DC2FEE3CF6F374B43C854E3342A2F1AC3E30C741CC41E679DF6D07CE6FA3A66083EC9B8C8BF3AF05D8BDBB0AA6CB3EF8C5BAA2A5E531BA9E28592F99E0FE4F95169A6C63F635D0197E325C5EC76219B907E4EBDCD401FB1986E4E3CA661FF73E7E2B8FD9988E753B7042B2BBCA76679",
    NumberStyles.HexNumber
);
var s = number.ToString();

【讨论】:

  • 你需要在字符串前面加上0,否则如果第一个数字在8-F之间,你会得到一个负数。
【解决方案2】:

使用System.Numerics.BigInteger 存储号码。要获得它,请使用 BigInteger.ParseNumberFlags 值,其中设置了 AllowHexSpecifier。 (如NumberFlags.HexNumber

【讨论】:

  • 如何将十六进制转换为数字并将其输出为字符串?
  • 指向文档页面的链接并不是非常有用。
猜你喜欢
  • 2015-08-08
  • 2017-08-12
  • 1970-01-01
  • 2012-01-29
  • 2011-07-03
  • 2015-11-15
  • 1970-01-01
  • 2013-04-28
  • 2017-08-07
相关资源
最近更新 更多