我有一个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];
}
答案 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
是为了防止签名扩展。