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

Convert 64 bits array into Int64 or ulong C#

我有一个 int 位数组(长度始终为 64),例如:

1110000100000110111001000001110010011000110011111100001011100100

我想把它写在一个 Int64(或 ulong?)变量中。怎么做?

我尝试创建一个 BitArray 然后获取 int,但它在 CopyTo 行上抛出 System.ArgumentException

private static Int64 GetIntFromBitArray(BitArray bitArray) {
    var array = new Int64[1];
    bitArray.CopyTo(array, 0);
    return array[0];
}

那是因为在documentation,

The specified array must be of a compatible type. Only bool, int, and byte types of arrays are supported.

所以你可以这样做:(未测试)

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 是为了防止符号扩展。