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

Dan*_*nov 7 c# 64-bit bit-manipulation typeconverter bitarray

我有一个int数组(长度总是64),如:

1110000100000110111001000001110010011000110011111100001011100100

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

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

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

har*_*old 7

那是因为如文档中所述,

指定的数组必须是兼容的类型.仅支持bool,int和字节类型的数组.

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

private static long GetIntFromBitArray(BitArray bitArray)
{
    var array = new byte[8];
    bitArray.CopyTo(array, 0);
    return BitConverter.ToInt64(array, 0);
}
Run Code Online (Sandbox Code Playgroud)

看一下实现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);
}
Run Code Online (Sandbox Code Playgroud)

施放uint是为了防止符号扩展.