发送:
接受:
8个字节,最后2个字节是CRC校验码。
cunsigned int crc16(unsigned char *ptr, unsigned char len)
{
unsigned int crc = 0xFFFF;
unsigned char i;
while (len--)
{
crc ^= *ptr++;
for (i = 0; i < 8; i++)
{
if (crc & 0x01)
{
crc >>= 1;
crc ^= 0xA001;
}
else
{
crc >>= 1;
}
}
}
return crc;
}
python代码。
如果有序列[0x01, 0x03, 0x01, 0xF4, 0x00, 0x01, 0xC4, 0x04],
0xC4是crc16的低字节,0x04是crc16的高字节,
pythonimport binascii
def calculate_crc(data):
# 初始化CRC值为0xFFFF
crc = 0xFFFF
for byte in data:
crc ^= byte
for _ in range(8):
if crc & 0x0001:
crc = (crc >> 1) ^ 0xA001
else:
crc = crc >> 1
# 返回CRC校验码作为一个字节数组
return crc.to_bytes(2, byteorder='little')
# 给定序列
data = [0x01, 0x03, 0x01, 0xF4, 0x00, 0x01, 0xC4, 0x04]
# 计算CRC校验码
crc_result = calculate_crc(data[:-2])
# 将CRC校验码打印为16进制字符串
crc_hex = binascii.hexlify(crc_result).decode('utf-8')
print(f"CRC校验码为: 0x{crc_hex.upper()}")
CRC校验码为: 0xC404
csharphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!