gpt4 book ai didi

c# - 将存储在整数列表(小端)中的二进制表示形式转换为 Biginteger

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:41 28 4
gpt4 key购买 nike

我有一个整数列表,比如说 L,它包含一个数字的二进制表示。列表L中的每个整数可以是0或1。“最低有效位”在左边(不是在右边)。

示例:1000001111 代表(十进制)数字 961,或 0111010001 代表 558。

我想将列表转换为 Biginteger。

到目前为止,我已经尝试了以下方法:

Dim bytes(L.Count - 1) As Byte
For i As Integer = 0 to L.Count - 1
bytes(i) = CByte(L(i))
Next

Dim Value As New BigInteger(bytes)

Return Value

但结果是完全错误的。任何人都可以帮助进行此转换吗? c# 的 vb.net 示例同样完美。

我还研究了从此处的问题中提取的类似以下内容:

Buffer.BlockCopy(intArray, 0, byteArray, 0, byteArray.Length);

但 Biginteger 转换仍然没有成功。

最佳答案

这应该有效,使用 BitArray帮助您获取值,以及 this snippet from Jon Skeet将其转换为 byte[]

int[] ints = new[] { 1,0,0,0,0,0,1,1,1,1 };
// 1,0,0,... becomes true,false,false,... with this Select
BitArray bits = new BitArray(ints.Select(x => x > 0).ToArray());

byte[] bytes = new byte[(bits.Length + 7) / 8];
bits.CopyTo(bytes, 0);

BigInteger bigInt = new BigInteger(bytes); // 961

如果性能至关重要,您可以通过使用位移位构建 byte[] 来改进它。但这是相当 (IMO) 简洁、可读且(我期望)快速的代码。

558(0,1,1,1,0,1,0,0,0,1)也可以。

关于c# - 将存储在整数列表(小端)中的二进制表示形式转换为 Biginteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22947412/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com