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

基于初始种子与查表法的CRC-3实现咨询:13位消息CRC计算疑问

如何用8位格式的CRC-3查表计算3位CRC

首先明确:你找到的网站生成的8位表完全可以用来计算3位CRC,因为表中每个值的低3位就是对应3位CRC的结果,高位只是补0的冗余位,不影响计算。前提是你生成表时的参数必须和你的需求完全匹配:

  • CRC宽度:3
  • 生成多项式:0xB(二进制1011,对应多项式x³+x+1)
  • 初始值:0x5
  • 输入/输出反转:按你的实际约定(通常默认不反转,即从消息最高位开始处理)
  • 最终异或值:0x0(无额外异或)

具体操作步骤

1. 初始化CRC寄存器

将CRC寄存器设为初始种子0x5(二进制101),按8位格式处理时就是0x05(高位补0,不影响结果)。

2. 处理13位消息

由于消息是13位,拆分为1个完整字节(8位)和1个5位片段处理:

处理前8位(完整字节)
  • 取消息前8位作为字节byte1
  • 计算查表索引:index = (crc ^ byte1) & 0xFF
  • 从表中取出对应值,更新CRC为该值的低3位:crc = crc_table[index] & 0x07
处理剩余5位

逐位从最高位到最低位处理(和前面的字节处理顺序一致):
对于每一位bit:

  1. 取出当前CRC的最高位:msb = (crc >> 2) & 1
  2. 将CRC左移1位并加入当前消息位,保留低3位:crc = ((crc << 1) | bit) & 0x07
  3. 如果msb为1,将CRC与0x03(二进制011,对应生成多项式x³+x+1的低3位)异或:crc ^= 0x03

3. 获取最终结果

处理完所有位后,CRC寄存器中的值就是3位宽的CRC结果(范围0~7)。

验证建议

可以用手动计算小例子验证结果,比如用全0的13位消息,按步骤计算后对比查表法的输出,确保参数和操作正确。

内容的提问来源于stack exchange,提问作者milan muller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:44:58