C语言
#include <stdio.h>
#include <stdint.h>
// CRC-8 计算函数
uint8_t crc8(const uint8_t *data, size_t length) {
uint8_t crc = 0x00; // 初始 CRC 值
uint8_t polynomial = 0x07; // CRC-8 多项式
while (length--) {
uint8_t byte = *data++; // 读取下一个字节
crc ^= byte;
for (uint8_t bit = 0; bit < 8; ++bit) {
if ((crc & 0x80) != 0) { // 如果最高位为1
crc = (crc << 1) ^ polynomial; // 左移一位,然后异或多项式
} else {
crc <<= 1; // 否则只左移一位
}
}
}
return crc;
}
int main() {
uint8_t data[] = {0x01, 0x02, 0x03}; // 示例数据
uint8_t result = crc8(data, sizeof(data));
printf("CRC-8: 0x%02X\n", result);
return 0;
}
Python语言
def crc8(data):
# CRC-8的初始值
crc = 0xFF
# CRC-8的多项式,通常为0x07
polynomial = 0x07
# 遍历数据中的每个字节
for byte in data:
crc ^= byte
# 对每个位进行移位和异或操作
for _ in range(8):
if crc & 0x80:
crc = (crc << 1) ^ polynomial
else:
crc <<= 1
return crc
# 测试代码
data = bytes([0x01, 0x02, 0x03, 0x04])
print("CRC-8校验和:", hex(crc8(data)))
690

被折叠的 条评论
为什么被折叠?



