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

时间:2015-04-04 11:33:31

标签: c# 64-bit bit-manipulation typeconverter bitarray

我有一个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];
}

1 个答案:

答案 0 :(得分:6)

这是因为正如documentation中提到的那样,

  

指定的数组必须是兼容类型。只支持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是为了防止签名扩展。