如何将大十进制整数转换为字节数组。
var number = "969837669069837851043825067021609343597253227631794160042862620526559";
请注意,我无法使用BigInteger
,因为我在.NET 3.5下使用Unity。
答案 0 :(得分:2)
我个人会使用BigInteger
。您可以在播放器设置下更改与.NET 4.6等效的Unity脚本,这样您就可以访问以前无法访问的一大堆框架。根据{{3}} .NET 4.6应该包含BigInteger
,从而解决您的问题。
要更改脚本等效内容,请转到Build Settings
=> Player Settings
=> Other Settings
=> Configuration
。在该设置列表中,您应该能够设置等效的脚本运行时。
完成后,您需要做的就是转换数字:
var number = "969837669069837851043825067021609343597253227631794160042862620526559";
byte[] numberBytes = BigInteger.Parse(number).ToByteArray();
答案 1 :(得分:1)
你可以编写自己的“BigInteger like type”,但我会高度建议反对它。这是其中一件事,你可以很快地做很多非常错误的事情。你永远不会像BigInteger那样接近内置类型的效率。
我确实为那些卡在1.0上的人写了一个TryParse替代品,所以我可能会给你一些提示:
至于TryParse,这是我为这种情况写的内容:
//Parse throws ArgumentNull, Format and Overflow Exceptions.
//And they only have Exception as base class in common, but identical handling code (output = 0 and return false).
bool TryParse(string input, out int output){
try{
output = int.Parse(input);
}
catch (Exception ex){
if(ex is ArgumentNullException ||
ex is FormatException ||
ex is OverflowException){
//these are the exceptions I am looking for. I will do my thing.
output = 0;
return false;
}
else{
//Not the exceptions I expect. Best to just let them go on their way.
throw;
}
}
//I am pretty sure the Exception replaces the return value in exception case.
//So this one will only be returned without any Exceptions, expected or unexpected
return true;
}