Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.465 Beiträge
 
Delphi 12 Athens
 
#14

Re: "Variablenübergreifende" Bitverschiebungen

  Alt 15. Mai 2009, 11:10
Zitat von Neutral General:
Zitat von Blup:
Funktioniert für count = 0..7 [...]
Ah jo das bringt mir ja nix
Habs aber jetzt wie oben beschrieben gelöst
Ganze Byte zu verschieben hab ich dir schon allein zugetraut.

Edit:
Delphi-Quellcode:
type
  TByteArray = packed array of Byte;

function Rol(const AValue, ACount: Byte): Byte register;
asm
  mov cl, dl
  rol al, cl
end;

function ArrayShl(const arr: TByteArray; count: integer): TByteArray;
var
  mask0, mask1, b0, b1: Byte;
  i: integer;
begin
  Result := Copy(arr);
  {Byte-Verschiebung}
  i := count div 8;
  if i > 0 then
  begin
    Move(Result[i], Result[0], SizeOf(Result[0]) * (Length(Result) - i));
    FillChar(Result[Length(Result) - i], SizeOf(Result[0]) * i, #0);
    count := count mod 8;
  end;
  {Bit-Verschiebung}
  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