用C语言编写计算crc64码
以下是用C语言编写计算crc64码的示例代码:
#include <stdio.h>
#include <stdint.h>
#define POLY UINT64_C(0x42F0E1EBA9EA3693)
uint64_t crc64(const uint8_t *data, size_t len)
{
uint64_t crc = UINT64_C(0xFFFFFFFFFFFFFFFF);
for (size_t i = 0; i < len; i++) {
uint8_t byte = data[i];
crc = crc ^ byte;
for (int j = 0; j < 8; j++) {
uint64_t mask = -(crc & 1);
crc = (crc >> 1) ^ (POLY & mask);
}
}
return crc ^ UINT64_C(0xFFFFFFFFFFFFFFFF);
}
int main()
{
const uint8_t data[] = {0x01, 0x02, 0x03, 0x04};
size_t len = sizeof(data);
uint64_t crc = crc64(data, len);
printf("CRC64: %llx\n", crc);
return 0;
}
在上面的代码中,使用了一个常量 POLY 来表示 CRC64 的多项式,即 0x42F0E1EBA9EA3693。函数 crc64 接收一个 uint8_t 类型的指针和一个 size_t 类型的整数作为参数,分别表示要计算 CRC 的数据和数据长度。在函数内部,使用一个循环来依次处理每个字节,对每个字节进行一次异或运算,然后进行 8 次循环,每次循环都根据当前的位运算结果和多项式进行异或运算,并将结果右移一位。最后,将结果再次异或 0xFFFFFFFFFFFFFFFF,就得到了 CRC64 的结果。
在 main 函数中,定义了一个 data 数组来存放要计算 CRC 的数据,然后调用 crc64 函数计算 CRC64 并打印结果
原文地址: https://www.cveoy.top/t/topic/hhIL 著作权归作者所有。请勿转载和采集!