Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.465 Beiträge
Delphi 12 Athens
|
Re: "Variablenübergreifende" Bitverschiebungen
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;
|
|
Zitat
|