【问题标题】:How can I store 256-bit integer on unity?如何统一存储 256 位整数?
【发布时间】:2018-09-09 03:11:12
【问题描述】:

我尝试使用 Unity 的 BigInteger 实现,但它仍然溢出(或者我可能以错误的方式使用?我也不确定,它只能执行 20 个字符的整数,类似于 64 位).... 这个这就是我的工作方式,我有一个十六进制,它有 64 个字符,然后我要进行算术计算,我想先将其转换为十进制形式并将其存储在变量中。

public BigInteger x = 0;

然后在这里溢出... HexToDecimal 是一个函数,它接受一个十六进制字符串并返回它的十进制形式。

x = HexToDecimal(hex);

HexToDecimal 的示例输出是

105627842363267744400190144423808258002852957479547731009248450467191077417570

这是我想要存储的数字的理想大小。 如果我使用非常小的数字,例如数十万或其他东西,它会起作用。但是 BitInteger 有点将其限制为 20 个字符,因为我尝试声明这样的变量,只是为了知道 BitInteger 限制我的位置

public BigInteger x = 10000000000000000000

当我在那里添加另一个“0”时,它会抛出一个错误,指出积分太大

【问题讨论】:

  • 展示你如何使用BigInteger 以及它是如何溢出的
  • 我刚刚声明了一个位整数类型的变量。比如“public BitInteger x;”
  • 编辑您的问题并添加。还要说明为什么你认为它 id 溢出。您当前的代码未显示有效代码或溢出证明
  • 完成编辑:)

标签: c# unity3d int


【解决方案1】:

您实例化 BigInteger 的方式是 convenience method for smaller numbers(请参阅“实例化 BigInteger”——我似乎无法直接链接到它)。这意味着您实际上创建了一个 int32 或 int64,然后将其转换为 BigInteger(因此它必须能够适应这些类型的有限大小)。

要真正利用 BigInteger 的任意大小,您可能需要使用BigInteger.Parse(String)。此方法将为数字字符串返回一个 BigInteger(它必须是当前系统文化定义的数字字符串——除了可能的前导负号之外没有其他内容)此方法在 Unity 中应该可以正常工作,因为它是 C# 的一部分标准库。

因此,对于您的 HexToDecimal 示例,假设它返回一个字符串,您会像这样使用它

x = BigInteger.Parse(HexToDecimal(hex));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2015-08-30
    • 2019-09-12
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多