You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法验证CRC目录中10款模型的residue参数,求问题排查

CRC Residue参数验证失败问题(特定模型)

此问题关联我此前提出的关于residue参数的问题:CRC residue verification fails

按照之前问题回答中的指引,我已成功验证CRC目录中几乎所有模型的residue参数,但以下10款模型无法得到指定residue:

  • CRC-4/INTERLAKEN
  • CRC-5/EPC-C1G2
  • CRC-5/USB
  • CRC-6/CDMA2000-A
  • CRC-6/CDMA2000-B
  • CRC-10/CDMA2000
  • CRC-11/FLEXRAY
  • CRC-12/CDMA2000
  • CRC-30/CDMA
  • CRC-31/PHILIPS

我使用RevEng工具简化CRC计算,以CRC-12/CDMA2000为例的操作流程如下:

reveng.exe -m crc-12/cdma2000 -c 313233343536373839
0d4d # Check: PASS

reveng.exe -m crc-12/cdma2000 -c 0313233343536373839d4d -x 0
0edc # Residue: FAIL (expected: 0000)

我先计算标准测试消息b'123456789'(十六进制为313233343536373839)的CRC,得到0d4d,与校验参数一致。随后以大端模式(因refin=False)将该12位CRC追加至原消息,得到0313233343536373839d4d,并计算无最终异或(-x 0参数)的CRC。其他模型均可得到与residue参数一致的结果,但上述10款模型无法实现。我还尝试不同起始消息测试,发现不同消息+CRC输入的residue结果不一致。

请问我哪里操作有误?

以下是我用于将CRC追加至消息的Python函数:

def append(buffer: bytes, crc: int, width: int, refin: bool) -> bytes:
    # Number of bytes in the buffer and the CRC
    b_buf: int = len(buffer)
    b_crc: int = -(width // -8) # ceil

    if refin:
        message = (crc << (b_buf * 8)) | int.from_bytes(buffer, byteorder := 'little')
    else: # not refin
        message = (int.from_bytes(buffer, byteorder := 'big') << width) | crc

    return message.to_bytes(b_buf + b_crc, byteorder)

内容的提问来源于stack exchange,提问作者Marko Gulin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:27:34