Чтобы уточнить: System.Collections.BitArray
Когда я говорю «не всегда», я не говорю, что это случайный или кажущийся случайным, кажется последовательным, что когда длина уменьшается так, что новая длина находится в пределах меньшего кратного «некоторого числа» (не мне известно, возможно 8) тогда внутренний "m_array" сжимается как ожидалось.
Я делаю что-то, что требует данных с произвольным числом битов, от 0 до 65535, и мне нужно иметь возможность превращать беззнаковые, знаковые, двойные, с плавающей точкой и строки в BitArrays и обратно. Библиотеки также не обсуждаются по разным причинам.
Мне нужно обойти это, так как (крайне) неожиданное поведение BitArray.Length отсутствует.
Вот пример того, когда это не сработает:
private const int _lengthInBits = 3; //not actually a const in program
private BitArray BitArrayFromLong(long lng)
{
return new BitArray(BitConverter.GetBytes(lng)) { Length = _lengthInBits };
}
private long BitArrayToLong(BitArray bitArray)
{
bitArray.Length = _lengthInBits; //this shouldn't be required but didn't think it would hurt
var byteArray = new byte[sizeof(long)];
bitArray.CopyTo(byteArray, 0);
return BitConverter.ToInt64(byteArray, 0);
}
Поэтому, когда я звоню BitArrayToLong(BitArrayFromLong(15))
, я ДОЛЖЕН получить 7, потому что 15 преобразуется в true, true, true, true, true (11111), которые затем ДОЛЖНЫ быть преобразованы в true, true, true (111), которые есть, но внутреннее значение 15 все еще сохраняется в этом «m_array», который, кажется, определяет скопированное значение в byteArray во втором методе!