Я пишу сценарий, позволяющий моему хост-устройству отправлять файлы данных на подчиненное устройство. Ведомый требует расчета контрольной суммы и добавления к концу моих запросов до отправки файла (ов). Моя проблема заключается в том, что я не только довольно новичок в программировании, но и по-прежнему пытаюсь полностью понять манипуляции с битами. Я сейчас в классе Java, поэтому функция контрольной суммы, поэтому части функций имеют знакомый формат, но поскольку я все еще царапаю голову битами и библиотекой бит, у меня возникают проблемы с переводом предоставленной функции контрольной суммы в Lua.Преобразование функции контрольной суммы C в Lua
Функция впервые описана следующим образом до быть предусмотрена функция в C:
Initialise the checksum as FFFF(hex).
For each byte
Checksum = Checksum XOR (current Byte)
For I = 0 to 7
If ((Checksum AND 1)=0)
Checksum = Right_Bit_Shift Checksum 1 bit
Else
Checksum = (Right_Bit_Shift Checksum 1 bit) XOR A001(hex)
Next I
Next Byte
Вот пример, приведенный написан на C:
/*
*Routine CRC takes a data string (data) "length" long and *
* * returns the checksum value
*
*NOTE WORD = unsigned short int
* BYTE = unsigned char
*/
WORD CRC(BYTE *data, WORD length)
{
WORD sum = 65535; /*Checksum value initialised to FFFFhex */
while (length-- > 0)
{
sum = ByteCRC(sum, *data++);
}
return sum;
}
WORD ByteCRC(WORD sum, BYTE data)
{
WORD i; /* Loop counter */
sum = sum^(WORD)data;
for (i=0; i<8; i++)
{
if ((sum&1) == 0)
sum = sum>>1
else
sum = (sum >> 1)^0xA001;
}
return sum;
}
Сейчас я в настоящее время зачислен в средний класс Java в школе. С учетом сказанного некоторые части этих функций я понимаю. Но, как я уже говорил, я все еще не полностью понимаю некоторые аспекты манипуляции бит, чтобы написать эти функции в формате Lua. Я пытаюсь воссоздать его сам в Lua, но не верю, что я прав или близко. К сожалению, я не понимаю желаемого эффекта достаточно, чтобы даже попробовать проверить это. Вот что я пытался написать сам на основе информации, предоставленной:
Function CRC(data, length)
sum = 65535
while length > 0 do
sum = ByteCRC(sum, data=data+1)
length = length - 1
end
return sum
end
Function ByteCRC(sum, data)
sum = sum ~ data
for i = 0, 8 do
if ((sum & 1) = 0)
sum = sum >> 1
else
sum = (sum >> 1) ~ string.char(0xA001)
end
end
return sum
end
Любой критикуя и дальнейшая помощь, помогая мне в А) написать это лучше и B) найти какие-либо ошибки в моем переводе это то, что я м ищет.
Что вы хотите сказать? – this
@this Я добавил requrest, чтобы иметь предоставленные функции, написанные аналогичным образом в Lua. – Pwrcdr87
SO не является кодовым письмом. Представьте конкретную проблему, пожалуйста. – this