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

4

我尝试在Unity中使用BigInteger实现,但仍然会溢出(或者可能我使用方法不正确?我不确定)。它只能处理20个字符的整数,即64位……我的需求是:我有一个具有64个字符的十六进制数,为了进行算术计算,我希望首先将它转换为十进制形式并存储在变量中。

public BigInteger x = 0;

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

x = HexToDecimal(hex);

HexToDecimal的一个示例输出为

105627842363267744400190144423808258002852957479547731009248450467191077417570

这是我想要存储的数字的理想大小。 如果我使用很小的数字,比如几百千之类的数字,它可以正常工作。但是BitInteger限制只能有20个字符,因为我尝试声明一个变量像这样,只是为了知道BitInteger限制我的位置

public BigInteger x = 10000000000000000000

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


1
展示您如何使用 BigInteger 并且如何溢出。 - Programmer
我刚刚声明了一个使用BitInteger类型的变量,例如:"public BitInteger x;"。 - user9496132
编辑你的问题并添加这个。同时展示为什么你认为它会溢出。你当前的代码没有展示一个可工作的代码或溢出证明。 - Programmer
已完成编辑 :) - user9496132
1个回答

5
你实例化 BigInteger 的方式是一个方便处理较小的数字的方法(请参见 "实例化 BigInteger" -- 我无法直接链接到它)。这意味着你实际上创建了 int32 或 int64,然后将其转换为 BigInteger(因此它必须能够适合这些类型的有限大小)。
要真正利用 BigInteger 的任意大小,你可能想使用 BigInteger.Parse(String)。该方法将返回数值字符串的 BigInteger(它必须是由当前系统文化定义的数值字符串 -- 除了可能的前导负号之外没有其他内容)。这个方法在 Unity 中应该完美地工作,因为它是 C# 标准库的一部分。
所以,对于你的 HexToDecimal 示例,假设它返回一个字符串,你可以像这样使用它
x = BigInteger.Parse(HexToDecimal(hex));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接