将64位数组转换为Int64或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]; } 

那是因为如文档中所述,

指定的数组必须是兼容的类型。 仅支持bool,int和byte类型的数组。

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

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