使用 python 计算 CRC 16
Posted
技术标签:
【中文标题】使用 python 计算 CRC 16【英文标题】:CRC 16 calculation using python 【发布时间】:2021-10-28 20:56:30 【问题描述】:我有一个从串行端口读取 7E0003000204009b387E 的传入数据包。
开始和结束标志为 7E,FCS/CRC 为 9b38,数据为 00030002000400。FCS 是根据 RFC 1662 中指定的算法计算的。https://www.rfc-editor.org/rfc/rfc1662#appendix-A
谁能提供一种在python中计算crc16的方法。
这是我正在寻找的 C# 等价物。
public static class Crc16
const ushort polynomial = 0x1021;
static readonly ushort[] table = new ushort[256];
public static ushort ComputeChecksum(byte[] bytes)
ushort crc = 0xffff;
for (int i = 0; i < bytes.Length; ++i)
byte index = (byte)(crc ^ bytes[i]);
crc = (ushort)((crc >> 8) ^ table[index]);
return (ushort)~crc;
static Crc16()
ushort value;
ushort temp;
for (ushort i = 0; i < table.Length; ++i)
value = 0;
temp = i;
for (byte j = 0; j < 8; ++j)
if (((value ^ temp) & 0x0001) != 0)
value = (ushort)((value >> 1) ^ polynomial);
else
value >>= 1;
temp >>= 1;
table[i] = value;
【问题讨论】:
我们不会在 *** 上为您编写代码,但如果您已经有工作的 C# 代码,为什么还需要 python? 你做了什么尝试?与您的想象相反,*** 不是免费的定制软件设计和编码服务。 看起来不像,但这些文章和模块可能会有所帮助。 How do I create an FCS for PPP packets?、crc16 0.1.1、crcmod 1.7、pycrc 0.9.2、pythoncrc 1.21、PyCRC-Hex 1.1.0 【参考方案1】:*** 不是代码编写服务,你这个坏人。
这里有一些代码:
import crcmod
f = crcmod.mkCrcFun(0x11021, initCrc=0, xorOut=0xffff)
print(hex(f(b'\x00\x03\x00\x02\x04\x00')))
输出是:
0x389b
请注意,CRC 会以 little-endian 顺序放入数据包中。
【讨论】:
以上是关于使用 python 计算 CRC 16的主要内容,如果未能解决你的问题,请参考以下文章