Есть код на си для подсчета контрольной суммы
word CountCS(byte *Buff, byte Cnt)
{
dword cs1, cs2, m;
byte k;
k = 0;
cs1 = 0;
cs2 = 0;
while (Cnt){
m = *Buff;
cs1 += m;
m ^= 0x5A;
if (k) m = (m » k)|(m « (8-k));
k = (k+1) & 0x07;
cs2 += m;
Buff++;
Cnt--;
}
return (cs2 « 8)|(cs1 & 0xFF);
}
В си особо не шарю. Помогите преобразовать этот код в Lua
function CRCsum(SFrame,Length)
CS1=1
CS2=0
DAT=0
k = 0
Frame = server.StringToTable(SFrame);
for i =1,Length,1 do
DAT = Frame[i];
CS1=bit.BitAnd(CS1,DAT);
DAT=bit.BitXor(DAT,0x5A);
if k~=0 then
DAT=bit.BitOr(bit.BitRshift(DAT,k),bit.BitLshift(D AT,8-k));
else
k=bit.BitAnd(k+1,0x07);
CS2=bit.BitAnd(CS2,DAT);
end
end;
CS1 = bit.BitAnd(CS1,0xFF);
return CS1;
end
вот примерно что у меня получилось