Преобразуйте 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 предотвратить знак-расширение.