
发送:

接受:

8个字节,最后2个字节是CRC校验码。

c展开代码unsigned 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的高字节,
python展开代码import 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
csharp展开代码https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!