将 64 位数组转换为 Int64 或 ulong C#
Convert 64 bits array into Int64 or 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];
}
那是因为在documentation,
The specified array must be of a compatible type. Only bool, int, and byte types of arrays are supported.
所以你可以这样做:(未测试)
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
是为了防止符号扩展。
我有一个 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];
}
那是因为在documentation,
The specified array must be of a compatible type. Only bool, int, and byte types of arrays are supported.
所以你可以这样做:(未测试)
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
是为了防止符号扩展。