简单字节管理标识位BitArray
BitArray bits = new BitArray(17);
int indx = 8;
bits[indx] = true;
Console.WriteLine(bits.ToString());
bits[indx] = false;
Console.WriteLine(bits.ToString());
/// <summary>
/// 标识位
/// </summary>
public sealed class BitArray
{
private readonly int _numBits;
private readonly byte[] _byteArr;
public BitArray(int numBits)
{
if (numBits <= 0)
{
throw new ArgumentException("numBits 必须是正数");
}
_numBits = numBits;
// 位数组分配字节
_byteArr = new byte[(numBits + 7) / 8];
}
public bool this[int index]
{
get
{
if (index < 0 || index >= _numBits)
{
throw new ArgumentException("非法index");
}
return (_byteArr[index / 8] & (1 << (index % 8))) != 0;
}
set
{
if (index < 0 || index >= _numBits)
{
throw new ArgumentException("非法index");
}
if (value)
{
_byteArr[index / 8] = (byte)(_byteArr[index / 8] | (1 << (index % 8)));
}
else
{
_byteArr[index / 8] = (byte)(_byteArr[index / 8] & ~(1 << (index % 8)));
}
}
}
public string GetBitString(int startIndex, int endIndex)
{
if (startIndex > endIndex)
{
throw new ArgumentException("非法index");
}
StringBuilder sb = new StringBuilder(endIndex - startIndex + 1);
for (int i = startIndex; i <= endIndex; i++)
{
if (this[i])
{
sb.Append('1');
}
else
{
sb.Append('0');
}
}
return sb.ToString();
}
public override string ToString()
{
StringBuilder sb = new StringBuilder(64);
for (int i = 0; i < _numBits; i++)
{
sb.AppendLine("Bit " + (i + 1).ToString("D5") + " : " + (this[i] ? "ON" : "-"));
}
return sb.ToString();
}
}