首页 > 解决方案 > 将 GDL90 CRC 代码转换为 Python 时出现问题

问题描述

在 GDL90 规范中有一段 C 代码可用于开发 CRC-16 校验和表。我已将其转换为 Python 3.8,但结果是无稽之谈,表值单调增长到 16 位以上。我究竟做错了什么?

GDL90 代码:

void crcInit( void )
{
    unsigned int i, bitctr, crc;
    for (i = 0; i < 256; i++)
    {
        crc = (i << 8);
        for (bitctr = 0; bitctr < 8; bitctr++)
        {
            crc = (crc << 1) ^ ((crc & 0x8000) ? 0x1021 : 0);
        }
        Crc16Table[i] = crc;
    }
}

我的翻译:

crcTable = []
for i in range(256):
    crc = (i << 8)
    for bitctr in range(8):
        # original line crc = (crc << 1) ^ ((crc & 0x8000) ? 0x1021 : 0)
        if (crc & 0x8000):
            val = 0x1021
        else:
            val = 0
        crc = (crc << 1) ^ val
    crcTable.append(hex(crc))

标签: pythoncrc

解决方案


不要使用hex(crc)- 将值转换为字符串。您不包含 Crc16Table 的 c 定义-我想您想将 8 位或 16 位值保存到表中,因此请保存crc&0xffcrc&0xffff


推荐阅读