【问题标题】:How to classify following CRC4 implementation?如何对以下 CRC4 实现进行分类?
【发布时间】:2019-02-03 20:12:35
【问题描述】:

我发现以下具有多项式 0x13 的 CRC4 C 代码对我有用。但是关于crcany resp。 CRC catalogue怎么分类?

uint8_t const crcTable[] = {
    0x0, 0x3, 0x6, 0x5, 0xC, 0xF, 0xA, 0x9, 0xB, 0x8, 0xD, 0xE, 0x7, 0x4, 0x1, 0x2,
    0x5, 0x6, 0x3, 0x0, 0x9, 0xA, 0xF, 0xC, 0xE, 0xD, 0x8, 0xB, 0x2, 0x1, 0x4, 0x7,
    0xA, 0x9, 0xC, 0xF, 0x6, 0x5, 0x0, 0x3, 0x1, 0x2, 0x7, 0x4, 0xD, 0xE, 0xB, 0x8,
    0xF, 0xC, 0x9, 0xA, 0x3, 0x0, 0x5, 0x6, 0x4, 0x7, 0x2, 0x1, 0x8, 0xB, 0xE, 0xD,
    0x7, 0x4, 0x1, 0x2, 0xB, 0x8, 0xD, 0xE, 0xC, 0xF, 0xA, 0x9, 0x0, 0x3, 0x6, 0x5,
    0x2, 0x1, 0x4, 0x7, 0xE, 0xD, 0x8, 0xB, 0x9, 0xA, 0xF, 0xC, 0x5, 0x6, 0x3, 0x0,
    0xD, 0xE, 0xB, 0x8, 0x1, 0x2, 0x7, 0x4, 0x6, 0x5, 0x0, 0x3, 0xA, 0x9, 0xC, 0xF,
    0x8, 0xB, 0xE, 0xD, 0x4, 0x7, 0x2, 0x1, 0x3, 0x0, 0x5, 0x6, 0xF, 0xC, 0x9, 0xA,
    0xE, 0xD, 0x8, 0xB, 0x2, 0x1, 0x4, 0x7, 0x5, 0x6, 0x3, 0x0, 0x9, 0xA, 0xF, 0xC,
    0xB, 0x8, 0xD, 0xE, 0x7, 0x4, 0x1, 0x2, 0x0, 0x3, 0x6, 0x5, 0xC, 0xF, 0xA, 0x9,
    0x4, 0x7, 0x2, 0x1, 0x8, 0xB, 0xE, 0xD, 0xF, 0xC, 0x9, 0xA, 0x3, 0x0, 0x5, 0x6,
    0x1, 0x2, 0x7, 0x4, 0xD, 0xE, 0xB, 0x8, 0xA, 0x9, 0xC, 0xF, 0x6, 0x5, 0x0, 0x3,
    0x9, 0xA, 0xF, 0xC, 0x5, 0x6, 0x3, 0x0, 0x2, 0x1, 0x4, 0x7, 0xE, 0xD, 0x8, 0xB,
    0xC, 0xF, 0xA, 0x9, 0x0, 0x3, 0x6, 0x5, 0x7, 0x4, 0x1, 0x2, 0xB, 0x8, 0xD, 0xE,
    0x3, 0x0, 0x5, 0x6, 0xF, 0xC, 0x9, 0xA, 0x8, 0xB, 0xE, 0xD, 0x4, 0x7, 0x2, 0x1,
    0x6, 0x5, 0x0, 0x3, 0xA, 0x9, 0xC, 0xF, 0xD, 0xE, 0xB, 0x8, 0x1, 0x2, 0x7, 0x4
};

uint8_t crc4(uint8_t const message[], int nBytes)
{   
    uint8_t data;
    uint8_t remainder = 0;

    for (int byte = 0; byte < nBytes; ++byte)
    {   
        data = message[byte] ^ remainder;
        remainder = (crcTable[data] ^ (remainder << 8)) << 4;
    }

    return (remainder >> 4);
}

【问题讨论】:

  • 该页面上只有两个 CRC4 实现,它们都被归类为 academic。 这有点道理,因为似乎没有人会使用 CRC在实际应用中这么少的字节。

标签: crc


【解决方案1】:

那就是:

width=4 poly=3 init=0 refin=false refout=false xorout=0 check=0xe residue=0 name="CRC-4/USER3095936"

或缩写:

w=4 p=3 r=f c=14 n=CRC-4/USER3095936

顺便说一句,代码有一些奇怪的地方。 ^ (remainder &lt;&lt; 8) 什么都不做,因为它总是为零。你可以摆脱它。其次,您可以通过将所有表条目向上移动四位来避免在循环中移动。

【讨论】:

  • 正是我正在寻找的!感谢代码改进建议。一切顺利!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 2010-09-30
  • 2013-07-15
  • 1970-01-01
  • 2015-11-03
相关资源
最近更新 更多