crc16校验C语言实现
时间: 2023-08-24 12:05:00 浏览: 112
以下是一个简单的CRC16校验C语言实现的示例代码:
```c
#include <stdint.h>
uint16_t crc16(uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
for (uint16_t i = 0; i < length; i++) {
crc ^= (uint16_t)data[i];
for (uint8_t j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc >>= 1;
crc ^= 0xA001;
} else {
crc >>= 1;
}
}
}
return crc;
}
```
这个函数接受一个指向数据缓冲区的指针和数据长度,返回计算出的CRC16值。这个函数实现了标准的CRC-16-CCITT算法,使用了0xA001作为生成多项式,初始值为0xFFFF。
相关问题
crc16校验c语言实现
下面是一个简单的实现:
```c
#include <stdio.h>
#define POLY 0x1021 // CRC-16-CCITT polynomial
#define INIT 0xFFFF // initial value of CRC register
unsigned short crc16(unsigned char *data, int len) {
unsigned short crc = INIT;
int i, j;
for (i = 0; i < len; i++) {
crc ^= (unsigned short)data[i] << 8;
for (j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ POLY;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main() {
unsigned char data[] = {0x01, 0x02, 0x03, 0x04};
int len = sizeof(data) / sizeof(data[0]);
unsigned short result = crc16(data, len);
printf("CRC-16: 0x%04X\n", result);
return 0;
}
```
其中,`POLY` 定义了校验码的多项式,`INIT` 定义了 CRC 寄存器的初始值。
函数 `crc16` 接收一个 `unsigned char` 类型的指针和一个 `int` 类型的长度参数,返回一个 `unsigned short` 类型的校验码。
在主函数中,我们通过定义一个 `unsigned char` 类型的数组 `data` 来模拟待校验的数据,然后调用 `crc16` 函数得到校验码并输出。
crc32校验c语言实现
下面是一个简单实现的 CRC32 校验的示例代码:
```c
#include <stdio.h>
unsigned int crc32(unsigned char *data, int length) {
unsigned int crc = 0xFFFFFFFF;
unsigned int table[256];
unsigned int poly = 0xEDB88320;
int i, j;
// 生成 CRC32 表
for (i = 0; i < 256; ++i) {
crc = i;
for (j = 0; j < 8; ++j) {
if (crc & 1) {
crc = (crc >> 1) ^ poly;
} else {
crc >>= 1;
}
}
table[i] = crc;
}
// 计算 CRC32 校验值
crc = 0xFFFFFFFF;
for (i = 0; i < length; ++i) {
crc = (crc >> 8) ^ table[(crc ^ data[i]) & 0xFF];
}
crc ^= 0xFFFFFFFF;
return crc;
}
int main() {
unsigned char data[] = {0x01, 0x02, 0x03, 0x04, 0x05};
int length = sizeof(data) / sizeof(data[0]);
unsigned int result = crc32(data, length);
printf("CRC32: 0x%08X\n", result);
return 0;
}
```
这段代码实现了一个简单的 CRC32 校验。函数 `crc32` 接受一个字节数组和数组长度作为输入,并返回计算得到的 CRC32 校验值。在 `main` 函数中,我们定义了一个示例数据数组 `data`,然后调用 `crc32` 函数计算 CRC32 校验值,并打印结果。
在这个示例中,采用的是常用的 CRC32 算法,具体的多项式为 `0xEDB88320`。函数中首先生成了一个 CRC32 表,然后根据输入数据进行计算得到 CRC32 校验值。
希望这对你有帮助!如果还有其他问题,请随时提问。
阅读全文