void generate(BYTE* bufer, int size)
{
memset(bufer, 0, size);
int i = 0;
while (i < size)
{
BYTE rnd = rand() % size;
if (!bufer[rnd])
{
bufer[rnd] = i;
i++;
}
}
}
Delphi
procedure generate(bufer: Pchar; size:integer);
var
i :integer;
rnd:Byte;
begin
Fillchar(bufer^, size,0 );
i := 0;
while i < size do
begin
Randomize;
rnd := random(size) ;
if bufer[rnd] <> #0 then
begin
bufer[rnd] := Char(i);
inc(i);
end;
end;
end;
procedure genereate(Bufer:pByte; nSize:Integer);
var i:Integer;
rnd:Byte;
begin
ZeroMemory(Bufer,nSize);
i := 0;
while i < nSize do
begin
rnd := Random(nSize);
if pByte(Integer(Bufer)+rnd)^ = 0 then
begin
pByte(Integer(Bufer)+rnd)^ := i;
inc(i);
end;
end;
end;
procedure Perm256(Bufer:pByte);
var tmp:Array[0..255] of Byte;
i:Integer;
begin
for i := 0 to 255 do
begin
tmp[pByte(Integer(Bufer)+i)^] := i;
end;
move(tmp, Bufer^, 256);
end;
procedure Perm16(Bufer:pByte);
var tmp:Array[0..15] of Byte;
i:Integer;
begin
for i := 0 to 15 do
begin
tmp[pByte(Integer(Bufer)+i)^] := i;
end;
move(tmp,Bufer^,16);
end;
procedure Jcc(Bufer:pWord; elemCount:Integer; permutation:pByte);
var temp:Array[0..15] of WORD;
i:Integer;
tmp:WORD;
begin
for i := 0 to elemCount - 1 do
begin
if i > PByte(Integer(permutation) + i)^ then
begin
tmp := i - pByte(Integer(permutation) + i)^;
tmp := tmp shl 9;
temp[i] := temp[i] - tmp;
end else
begin
tmp := pByte(Integer(permutation) + i)^ - i;
tmp := tmp shl 9;
temp[i] := temp[i] + tmp;
end;
end;
move(temp, Bufer^, 2*16);
end;