如何在 python 中计算 CRC
How to calculate CRC in python
我的问题是应该如何计算CRC?我知道当你计算 CRC 时,你有一个校验和,你需要将它附加到原始数据,当你将数据+校验和一起发送时,接收方可以通过简单地将数据除以多项式来检测是否有任何错误以及是否有除 0 以外的任何余数。
我不知道如何附加,因为每个人都只谈论使用如下代码:
crc32 = crcmod.mkCrcFun(0x104c11db7, 0, False, 0xFFFFFFFF)
bytes_read = f.read(BUFFER_SIZE)
this_chunk_crc=crc32(bytes_read)#will return some integer
您已经在计算 CRC。您显然是在询问如何将 附加 CRC(一个整数)到您的消息(一个字节字符串)中。
您将使用 crc.to_bytes(4, 'big')
将返回的 CRC 转换为按 big-endian 顺序排列的四个字节的字符串。然后您可以将其附加到您的消息中。例如:
msg += crc32(msg).to_bytes(4, 'big')
我选择了 big-endian 顺序,因为您的 CRC 是在第三个参数中用 False
定义的。如果那是 True
(反射的 CRC),那么我会选择 little-endian 顺序,'little'
。
正确完成所有这些操作后,附加了 CRC 的结果消息的 CRC 将始终是相同的常量。但是在这种情况下 不是 零。该 CRC 定义的常数是 0x38fb2284
,或十进制的 955982468。
我的问题是应该如何计算CRC?我知道当你计算 CRC 时,你有一个校验和,你需要将它附加到原始数据,当你将数据+校验和一起发送时,接收方可以通过简单地将数据除以多项式来检测是否有任何错误以及是否有除 0 以外的任何余数。 我不知道如何附加,因为每个人都只谈论使用如下代码:
crc32 = crcmod.mkCrcFun(0x104c11db7, 0, False, 0xFFFFFFFF)
bytes_read = f.read(BUFFER_SIZE)
this_chunk_crc=crc32(bytes_read)#will return some integer
您已经在计算 CRC。您显然是在询问如何将 附加 CRC(一个整数)到您的消息(一个字节字符串)中。
您将使用 crc.to_bytes(4, 'big')
将返回的 CRC 转换为按 big-endian 顺序排列的四个字节的字符串。然后您可以将其附加到您的消息中。例如:
msg += crc32(msg).to_bytes(4, 'big')
我选择了 big-endian 顺序,因为您的 CRC 是在第三个参数中用 False
定义的。如果那是 True
(反射的 CRC),那么我会选择 little-endian 顺序,'little'
。
正确完成所有这些操作后,附加了 CRC 的结果消息的 CRC 将始终是相同的常量。但是在这种情况下 不是 零。该 CRC 定义的常数是 0x38fb2284
,或十进制的 955982468。