Может кто-нибудь перевести этот код на Python?я попробовал и попробовал еще раз, но не справился:
#define CRC24_INIT 0xB704CEL
#define CRC24_POLY 0x1864CFBL
typedef long crc24;
crc24 crc_octets(unsigned char *octets, size_t len)
{
crc24 crc = CRC24_INIT;
int i;
while (len--) {
crc ^= (*octets++) << 16;
for (i = 0; i < 8; i++) {
crc <<= 1;
if (crc & 0x1000000)
crc ^= CRC24_POLY;
}
}
return crc & 0xFFFFFFL;
}
У меня есть функция поворота влево (ROL24(value,bits_to_rotate_by)
), которая, как я знаю, работает, так как я получил ее из исходного кода авторитетного программиста, но я не получаю *
и ++
на октете.я только отчасти понимаю, как ++
работает в c ++, и я вообще не знаю, что такое *
мой код:
def crc24(octets, length):# now octects is a binary string
INIT = 0xB704CE
POLY = 0x1864CFB
crc = INIT
index = 0
while length:
crc ^= (int(octets[index], 2) << 16)
index += 1
for i in xrange(8):
crc = ROL(crc, 1)
if crc & 0x1000000:
crc ^= POLY
length -= 1
return crc & 0xFFFFFF