用c语言实现crc校验
作者:野牛程序员:2024-11-06 21:42:02C语言阅读 2319
用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的模块