用c语言实现crc校验
作者:野牛程序员:2024-11-06 21:42:02C语言阅读 2805
用c语言实现crc校验
用c语言实现crc校验
CRC(循环冗余校验)是一种常用于网络通信和存储设备的数据校验方法。以下是用 C 语言实现 CRC 校验的一个简单示例,基于常见的 CRC-32 算法。
#include <stdio.h>
#include <stdint.h>
// CRC-32 查找表(只计算一次,之后用于加速)
uint32_t crc32_table[256];
// 生成 CRC-32 查找表
void generate_crc32_table() {
uint32_t polynomial = 0xedb88320;
for (uint32_t i = 0; i < 256; i++) {
uint32_t crc = i;
for (uint32_t j = 8; j > 0; j--) {
if (crc & 1) {
crc = (crc >> 1) ^ polynomial;
} else {
crc = crc >> 1;
}
}
crc32_table[i] = crc;
}
}
// 计算数据的 CRC-32 校验值
uint32_t calculate_crc32(const uint8_t *data, size_t length) {
uint32_t crc = 0xffffffff; // 初始值是 0xFFFFFFFF
for (size_t i = 0; i < length; i++) {
uint8_t byte = data[i];
uint32_t index = (crc ^ byte) & 0xff;
crc = (crc >> 8) ^ crc32_table[index];
}
return ~crc; // 返回反转后的 CRC 值
}
int main() {
// 生成 CRC-32 查找表
generate_crc32_table();
// 测试数据
const uint8_t data[] = "Hello, CRC!";
size_t length = sizeof(data) - 1; // 排除末尾的 null 字符
// 计算 CRC-32 校验值
uint32_t crc_value = calculate_crc32(data, length);
printf("CRC-32: 0x%08X\n", crc_value);
return 0;
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:python判断龙腾数?
- 下一篇:Python计算CRC32的模块
