将64位数组转换为Int64或ulong C#

7
我有一个由整数数组组成的位数组(长度始终为64),如下所示:
1110000100000110111001000001110010011000110011111100001011100100
我想将其写入一个Int64(或ulong?)变量中。该如何实现?
我尝试创建一个BitArray,然后获取int,但它在复制到行时抛出了System.ArgumentException异常。
private static Int64 GetIntFromBitArray(BitArray bitArray) {
    var array = new Int64[1];
    bitArray.CopyTo(array, 0);
    return array[0];
}
1个回答

9
那是因为正如文档中提到的,

指定的数组必须是兼容类型。只支持布尔、整数和字节类型的数组。

所以你可以这样做:(未经测试)
private static long GetIntFromBitArray(BitArray bitArray)
{
    var array = new byte[8];
    bitArray.CopyTo(array, 0);
    return BitConverter.ToInt64(array, 0);
}

看一下BitArray.CopyTo的实现,将位拷贝到一个int[]中会更快(然后从其两个半部分构建long),可能类似于这样:(也没有测试)

private static long GetIntFromBitArray(BitArray bitArray)
{
    var array = new int[2];
    bitArray.CopyTo(array, 0);
    return (uint)array[0] + ((long)(uint)array[1] << 32);
}

将类型转换为uint是为了防止符号扩展。


太好了!你让我的一天都变得美好了!问题已解决。 - Danil Shaykhutdinov

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