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)
那是因为如文档中所述,
指定的数组必须是兼容的类型.仅支持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是为了防止符号扩展.