
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;