Я понял, что следующий код CRC4 C с полиномом 0x13 будет работать для меня.Но что касается crcany соотв. каталог CRC как его классифицировать?
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);
}