- 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();
}
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;
}
}