简单字节管理标识位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();
    }
}
posted @ 2021-01-20 20:22  wesson2019  阅读(107)  评论(0编辑  收藏  举报