-
-
Save oysstu/68072c44c02879a2abf94ef350d1c7c6 to your computer and use it in GitHub Desktop.
def crc16(data: bytes, poly=0x8408): | |
''' | |
CRC-16-CCITT Algorithm | |
''' | |
data = bytearray(data) | |
crc = 0xFFFF | |
for b in data: | |
cur_byte = 0xFF & b | |
for _ in range(0, 8): | |
if (crc & 0x0001) ^ (cur_byte & 0x0001): | |
crc = (crc >> 1) ^ poly | |
else: | |
crc >>= 1 | |
cur_byte >>= 1 | |
crc = (~crc & 0xFFFF) | |
crc = (crc << 8) | ((crc >> 8) & 0xFF) | |
return crc & 0xFFFF |
return('{:04X}'.format(crc))
Thanks, it works. Is there a better way to convert the list to be in a suitable format than this ChatGPT suggestion? (i'm very new to python)
bits_string = ''.join(str(bit) for bit in input_list)
int_value = int(bits_string, 2)
hex_value = hex(int_value)
hex_string = hex_value.replace('0x', '0x0') if len(hex_value) % 2 == 1 else hex_value
hex_value = bytes.fromhex(hex_string[2:])
crc=crc16(hex_value)
@pragma31 if I have a payload like this : " 623e0200000000000000000000000000" where 623e is crc given by a software i want to verify it , so what should i pass to get this value to the function that you have written here crc16 , thanks
same if i want to use https://crccalc.com/
@oysstu could you please guide me how could I use this code.
My data is (hex) E3BCBEBEA65EB3B87266124B2B238B6B
Polynomial is 0x1021
Well converting it from binary to hexadecimal it’s 0x92 and according to https://crccalc.com/ that should return 420B for CRC-16-CCITT-FALSE. If that is a different one than the above code, how can i change the code for this variant that i need?