gpt4 book ai didi

CRC8算法说明

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:46 26 4
gpt4 key购买 nike

我偶然发现了这个 8 位 CRC 的实现:https://stackoverflow.com/a/15171925/243827

有人可以阐明该表是如何获得的吗?我已经取消注释 crc8_slow 函数并尝试用

喂它
  byte crc;
byte data[1] = {0x01};
crc = crc8_slow(0, data, sizeof(data)/sizeof(byte));
printf("0x%.2X", crc);

对于定义为 4d、d4、a6 或 b2 的 POLY。我似乎无法从该表中重现该值。另外,我需要如何为移位寄存器的非 0xff 初始值修改该代码?

编辑 1:

#define POLY              0xB2

byte crc;
byte data[1] = {0x80};
crc = crc8_slow(0, data, sizeof(data)/sizeof(byte));
printf("0x%.2X", crc);

byte crc8_slow(byte crc, byte *data, size_t len)
{
byte *end;

if (len == 0)
return crc;

// crc ^= 0xff;
end = data + len;

do {
crc ^= *data++;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
} while (data < end);

// return crc ^ 0xff;
return crc;
}

运行时产生 0x01。如果重要的话,我正在使用 Atmega 8 位。

最佳答案

该表是单个字节 0..255 的 crc8_slow(),没有初始和最终异或。该代码已经将 POLY 定义为 0xb2,它是给定多项式的反射(reflect)(0x4d 位反转)。

对于具有零初始寄存器值且没有最终异或的不同 CRC-8 定义,只需从代码中删除两个异或。

可以看看crcany为任何给定的规范生成 CRC 代码。

关于CRC8算法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com