Einzelnen Beitrag anzeigen

heri

Registriert seit: 20. Mär 2006
81 Beiträge
 
Delphi 2006 Enterprise
 
#1

BitmaskToByte -> ByteToBitmask

  Alt 6. Mai 2008, 07:50
ich habe in der DP folgenden Code gefunden um eine Bitmask als Byte darzustellen zB. 11000001 -> 1+2+128 -> 131

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
     Inc(Result, 1 shl i); //2 hoch der Position in der Bitmaske incrementiert werden.
end;
siehe DP: http://www.delphipraxis.net/internal...=bitmasktobyte

nun möchte ich die "Umkehrfunktion" haben und habe dazu folgenden Code erstellt:

Delphi-Quellcode:
function ByteToBitmask(AValue:Byte):TBitmask;
var
i,t:integer;
begin

  t := 1;
  for i := 0 to 7 do
    Inc( t, 1 SHL i );

  for i := 8 downto 0 do
  begin

    if AValue>=t then
    begin

      Result.Bits[i] := True;

      AValue := AValue - t;

    end
    else
      Result.Bits[i] := False;

    t := t div 2;
  end;

end;
kann jemand den aufgeführten Code optimieren oder hat eine bessere Vorgehensweise?
das wäre super!
Thx
  Mit Zitat antworten Zitat