Python CRC8 расчет - PullRequest
       25

Python CRC8 расчет

0 голосов
/ 18 сентября 2018

У меня есть несколько байтов, для которых я хочу вычислить CRC8 в python.

У меня нет такого опыта, но я знаю, из технических характеристик моего устройства, что этот расчет долженбыть сделано с полиномом 0x07 и инициализацией 0x00.

Давайте рассмотрим вариант использования.Я получил этот список байтов, где я знаю, что последним является CRC:

0x00 0x11 0x23 0x32 0x1C 0xAC 0x23 0x3F 0x25 0x47 0x3D 0xB7 0xE2 0xC5 0x6D 0xB5 0xDF 0xFB 0x48 0xD2 0xB0 0x60 0xD0 0xF5 0xA7 0x10 0x96 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC5 0x8A

Теперь, как я могу вычислить CRC на моей стороне, чтобы проверить, соответствует ли он 0x8A?

Я провел некоторые исследования и попробовал различные модули Python, такие как crcmod , crc8 и libscrc , но я не мог заставить их работать: иногда яУ меня ошибка MemoryError на консоли!

Я также пытался использовать следующий код, но, похоже, он не возвращает мне то, что я считаю правильным CRC (0x8a):

import crc8
hash = crc8.crc8()
hash.update("0x001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C58A".encode('utf-8'))
print( hash.hexdigest() )

Что я делаю не так?

Есть ли кто-нибудь с опытом, который может мне помочь?Может быть, опубликовать фрагмент кода, который я могу использовать для расчета?

Однако, любая помощь будет оценена по достоинству!Большое спасибо за вашу поддержку ...

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

import crc8

hash = crc8.crc8 () hash.update ("001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E0000000000000000000C5" 100 * * 100 * * 100 * * 100 * * 100 *) (*) * 100h *) (*) * 100)

0 голосов
/ 20 сентября 2018

0x8a соответствует стандартному CRC-8:

width=8  poly=0x07  init=0x00  refin=false  refout=false  xorout=0x00  check=0xf4  residue=0x00  name="CRC-8"

Python crc8, с которым вы связаны, будет делать именно то, что вы хотите.

Например (в Python 3):

hash.update(b'\x00\x11\x23\x32\x1C\xAC\x23\x3F\x25\x47\x3D\xB7\xE2\xC5\x6D\xB5\xDF\xFB\x48\xD2\xB0\x60\xD0\xF5\xA7\x10\x96\xE0\x00\x00\x00\x00\x00\x00\x00\x00\xC5')
print(hash.hexdigest())

дает:

8a

Если вы включите в данные 8a, то результат будет нулевым.

...