我有一个 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];
}
这是因为正如文中提到的文档 https://msdn.microsoft.com/en-us/library/system.collections.bitarray.copyto(v=vs.110).aspx,
指定的数组必须是兼容的类型。仅支持 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
是为了防止符号扩展。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)