如何在 Unity 上存储 256 位整数?

4 c# int unity-game-engine

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

public BigInteger x = 0;
Run Code Online (Sandbox Code Playgroud)

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

x = HexToDecimal(十六进制);

HexToDecimal 的示例输出是

105627842363267744400190144423808258002852957479547731009248450467191077417570

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

public BigInteger x = 10000000000000000000

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

Pet*_*r G 5

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

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

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

x = BigInteger.Parse(HexToDecimal(hex));
Run Code Online (Sandbox Code Playgroud)