如何在统一上存储256位整数?

时间:2018-03-30 04:16:23

标签: c# unity3d int

我尝试使用Unity的BigInteger实现,但它仍然溢出(或者我使用的方式错误?我也不确定,它只能执行20个字符的整数,如64位)....我的东西是如何工作的,我有一个64字符的十六进制,然后我做关节计算,我想先将它转换成十进制形式并将其存储在变量中。

import csv

def FindAverage(student_name,file_name):
    with open(file_name,newline='') as csvfile: #open your csv file
        reader=csv.reader(csvfile)
        for row in reader:
            if row[0]==student_name: #if the student is found
                grades=[int(i) for i in row[1:]] #slice the row to get grades and convert to int
                print("Average : ",sum(grades)/len(grades)) #print average


FindAverage("Mr. Student","grades.csv")
OUTPUT : Average :  85.0

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

  

x = HexToDecimal(hex);

HexToDecimal的示例输出

  

105627842363267744400190144423808258002852957479547731009248450467191077417570

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

  

public BigInteger x = 0;

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

1 个答案:

答案 0 :(得分:4)

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

要真正利用BigInteger的任意大小,您可能希望使用BigInteger.Parse(String)。这个方法将为一个数字字符串返回一个BigInteger(它必须是一个数字字符串,由当前系统文化定义 - 除了可能的前导否定符号之外别无其他)此方法在Unity中完全正常,因为它是C#的一部分标准的lib。

因此,对于你的HexToDecimal示例,假设它返回一个字符串,你就像

一样使用它
x = BigInteger.Parse(HexToDecimal(hex));