Как вычислить контрольную сумму в кадре HDLC
Я пытаюсь найти, как вычислить контрольную сумму из кадра HDLC. Я пробую на примере: 7E A0 0A 00 02 00 23 21 93 [18 71] - контрольная сумма 7E Я пробовал этот калькулятор: https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/
Я поместил туда эту часть кадра: A0 0A 00 02 00 23 21 93, но результат не совпал...
Мне нужен ваш совет, ребята...
2 ответа
Не вдаваясь в подробности, напомню, что 7E - это не контрольная сумма, а только тег - первый байт в сообщении hdlc. У вас есть полное сообщение, которым вы можете поделиться?
Реализовать на python: после вычисления crc сначала напишите старший бит, а затем младшие биты, например
crc= "3a3b" crc_used в пакете=3b3a
вы можете попробовать это:
import crcmod #pip3 install crcmod
import sys
def calculate_crc(packet):
packet=''.join(packet.split(' '))
crc16 = crcmod.mkCrcFun(0x11021, rev=True, initCrc=0x0000, xorOut=0xFFFF)
fcs=str(hex(crc16(bytes.fromhex(packet))))
crc_f=str(fcs[4:6])+str(fcs[2:4])
if len(crc_f)<4:
diff=4-len(crc_f)
crc_f= "0"*diff + crc_f
return str(crc_f).upper()
print(calculate_crc("A0 0A 00 02 00 23 21 93"))
output: 1871