用于大量位的 C# Biginteger
C# Biginteger for huge number of bits
我想知道是否有使用 C# 存储大数字的有效方法。我想创建由 960 个字节组成的数字,但 BigInteger
无法容纳它。如果有任何建议,我将不胜感激。
更新:我正在使用随机字节生成器来填充 BigInteger
的构造函数所需的数组。对于 960 字节数组,我 BigInteger
返回一个负数。
static void Main(string[] args)
{
var arr = new byte[960];
for (int i = 0; i != arr.Length; i++)
{
arr[i] = byte.MaxValue;
}
var big = new BigInteger(arr);
}
工作得很好,结果是 -1
,因为数字的表示形式在 two's complement 中。这意味着只有 1
的二进制数字总是解析为 -1,如您在文章中所见。
如果你再增加一个 Length 并将数组的 last 元素设置为零你应该得到一个正数代表你的二进制数(这个字节不会伤害你):
var arr = new byte[961];
arr[arr.Length-1] = 0;
var big2 = new BigInteger(arr);
但是你真的应该确定你的二进制数是什么格式以及 BigInteger
是什么 "reading"
我想知道是否有使用 C# 存储大数字的有效方法。我想创建由 960 个字节组成的数字,但 BigInteger
无法容纳它。如果有任何建议,我将不胜感激。
更新:我正在使用随机字节生成器来填充 BigInteger
的构造函数所需的数组。对于 960 字节数组,我 BigInteger
返回一个负数。
static void Main(string[] args)
{
var arr = new byte[960];
for (int i = 0; i != arr.Length; i++)
{
arr[i] = byte.MaxValue;
}
var big = new BigInteger(arr);
}
工作得很好,结果是 -1
,因为数字的表示形式在 two's complement 中。这意味着只有 1
的二进制数字总是解析为 -1,如您在文章中所见。
如果你再增加一个 Length 并将数组的 last 元素设置为零你应该得到一个正数代表你的二进制数(这个字节不会伤害你):
var arr = new byte[961];
arr[arr.Length-1] = 0;
var big2 = new BigInteger(arr);
但是你真的应该确定你的二进制数是什么格式以及 BigInteger
是什么 "reading"