现在我有以下代码来生成CRC-16(Modbus)。我对CRC的概念很陌生,我需要制作一个CRC-8。可以修改此代码以生成CRC-8吗?我有for循环,起始于import dataclasses, json
class EnhancedJSONEncoder(json.JSONEncoder):
def default(self, o):
if dataclasses.is_dataclass(o):
return dataclasses.asdict(o)
return super().default(o)
json.dumps(foo, cls=EnhancedJSONEncoder)
,结束于int = 1;
,因为我忽略了第一个和最后一个字节。
i<tembByteList.Count - 1;
答案 0 :(得分:1)
好的。只需将0xa001
替换为0xe5
,并将初始化初始化为零(ushort reg_crc = 0;
)。这将生成蓝牙CRC-8。使用0x8c
将生成Maxim CRC-8。当然,您只需要在消息末尾插入一个字节即可。
如果您希望使用全1初始化的CRC(对消息中的初始字符串零敏感),则可以使用ROHC CRC-8,将0xe0
用于多项式,然后将reg_crc
初始化为0xff
。
顺便说一句,if
语句可以由三元运算符代替,我认为它更易读:
reg_crc = (reg_crc & 1) != 0 ? (reg_crc >> 1) ^ POLY : reg_crc >> 1;