есть две вроде бы одинаковые функции:
Код: Выделить всё
procedure AddCheckSumm(var data: array of byte; len: integer);
type trec = record
t0: byte;
t1: byte;
t2: byte;
t3: byte;
end;
var chksum: Longword;
i: integer;
ecx: Longword;
t: trec;
begin
if length(data)<len+4 then exit;
chksum := 0;
i := 0;
while i < len do begin
t.t0 := data[i];
t.t1 := data[i + 1];
t.t2 := data[i + 2];
t.t3 := data[i + 3];
ecx := Longword(t);
chksum := chksum xor ecx;
i := i + 4;
end;
t := trec(chksum);
data[len]:=t.t0;
data[len+1]:=t.t1;
data[len+2]:=t.t2;
data[len+3]:=t.t3;и
Код: Выделить всё
void AddCheckSumm(int data[], int len) // expl: AddCheckSumm(Data,24);
{
union trec
{
char t[4];
long l;
};
trec t;
unsigned long int chksum;
unsigned long int ecx;
int i=0;
//тело.
if (sizeof(data) < len+4)
{ return; };
chksum = 0;
i = 0;
while (i<len)
{
t.t[0] = data[i];
t.t[1] = data[i +1];
t.t[2] = data[i +2];
t.t[3] = data[i +3];
ecx = t.l;
chksum = chksum ^ ecx;
i = i +4;
}
t.l = chksum;
data[len] = t.t[0];
data[len +1] = t.t[1];
data[len +2] = t.t[2];
data[len +3] = t.t[3];
}
только вот первая работает, а вторая - нет. где прокол ?