Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.439 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: "Variablenübergreifende" Bitverschiebungen

  Alt 14. Mai 2009, 09:39
Funktioniert für count = 0..7:
Delphi-Quellcode:
function Rol(const AValue, ACount: Byte): Byte register;
asm
  mov cl, dl
  rol al, cl
end;

function ArrayShl(arr: TByteArray; count: integer): TByteArray;
var
  mask0, mask1, b0, b1: Byte;
begin
  Result := Copy(arr);
  mask0 := $FF shl Count;
  mask1 := mask0 xor $FF;
  b1 := 0;
  for i := High(Result) downto 0 do
  begin
    b0 := rol(Result[i], count);
    Result[i] := (b0 and mask0) or (b1 and mask1);
    b1 := b0;
  end;
end;
  Mit Zitat antworten Zitat