in die erste Richtung würde ich es so machen:
Delphi-Quellcode:
function BitmaskToByte(AValue:TBitmask):byte;
var i:integer;
begin
result := 0; // Rückgabewert auf 0 setzten. WICHTIG. Weglassen dieser Zeile kann zu faulen Ergebnisen führen.
for i := 0 to 7 do
if avalue.bits[i] then //Wenn dieser Wert der Bitmaske auf "1" steht, muss das Ergebnis um
result := result or (1 shl i); //2 hoch der Position in der Bitmaske incrementiert werden.
end;
in die andere Richtung wäre es dann so:
Delphi-Quellcode:
function ByteToBitmask(AValue:Byte):TBitmask;
var i: Integer;
begin
for i := 0 to 7 do
result.bits[i] := AValue and (1 shl i) <> 0;
end;