Преобразуйте 64-битный массив в Int64 или ulong C#
у меня есть массив 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];
}
1 ответов
это потому, что, как указано в документация,
указанный массив должен быть совместимого типа. Поддерживаются только типы массивов 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
предотвратить знак-расширение.