Bitmaske Byte

  • Klasse zum Erzeugen einer Bitmaske aus einem Byte und umgekehrt
static void Main(string[] args)
{
    BitMaskFromByte bm = new BitMaskFromByte();

    ushort[] b = { 1, 1, 1, 1, 0, 1, 1, 0 }; // 111 dezimal

    bm.Mask = b;

    Console.WriteLine("{0}: {1}", bm.ByteData.ToString(), bm.ToString());

    Console.ReadLine();
}
  • Code
public class BitMaskFromByte
{
    private byte _byData = 0;
    ushort[] _usMask = { 0, 0, 0, 0, 0, 0, 0, 0};

    public BitMaskFromByte()
    {
    }

    // Property für Byte I/O
    public byte ByteData
    {
        get
        {
            return _byData;
        }

        set
        {
            _byData = value;

            for (int i = 0; i < _usMask.Length; i++)
            {
                _usMask[i] = BitIsSet(i);
            }
        }
    }

    // Property für Bitmaske
    public ushort[] Mask
    {
        get
        {
            return _usMask;
        }

        set
        {
            _usMask = value;

            // Hilfsvariable, da mit ushort und byte keine Rechenop. möglich sind
            uint _uiData = 0;

            for (int i = 0; i < _usMask.Length; i++)
            {
                if (_usMask[i] == 1)
                {
                    _uiData = _uiData + (uint)Math.Pow(2.0, i);
                }
            }

            // niederwertigstes Byte (0) von uint zurückgeben
            _byData = BitConverter.GetBytes(_uiData)[0];
        }
    }

    // Hilfsfunktion
    public ushort BitIsSet(int iIndex)
    {
        ushort usRetVal = 0;

        // 2^0=1, 2^1=2, 2^2=4, 2^3=8, 2^4=16, 2^5=32, 2^6=64, 2^7=128
        byte[] byMask = { 1, 2, 4, 8, 16, 32, 64, 128 };

        if ((_byData & byMask[iIndex]) == byMask[iIndex])
        {
            usRetVal = 1;
        }

        return usRetVal;
    }

    // überschriebene Funktion für die formatierte Ausgabe der Bitmaske
    public override string ToString()
    {
        string sRetVal = "";

        for (int i = 0; i < _usMask.Length; i++)
        {
            sRetVal = sRetVal + _usMask[i].ToString();
        }

        return sRetVal;
    }
}