CRC-16/CCITT的C语言实现
时间: 2023-12-28 12:03:28 浏览: 274
很高兴为您解答,以下是CRC-16/CCITT的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
uint16_t crc16_ccitt(const void *buf, int len)
{
const uint8_t *data = buf;
uint16_t crc = 0xFFFF;
while (len--)
{
crc ^= *data++;
for (int i = 0; i < 8; i++)
{
if (crc & 1)
crc = (crc >> 1) ^ 0x8408;
else
crc = crc >> 1;
}
}
return crc;
}
int main()
{
uint8_t msg[] = {0x12, 0x34, 0x56, 0x78};
uint16_t crc = crc16_ccitt(msg, sizeof(msg)/sizeof(msg[0]));
printf("CRC16/CCITT is: %0X\n", crc);
return 0;
}
```
如果您有其他问题,欢迎继续提问。
相关问题
用c编写CRC-16-CCITT
以下是用C语言编写CRC-16-CCITT的示例代码:
```c
#define CRC16_CCITT 0x1021
unsigned short crc16_ccitt(const unsigned char *buf, int len)
{
unsigned short crc = 0xFFFF;
for (int i = 0; i < len; i++)
{
crc ^= (unsigned short)buf[i] << 8;
for (int j = 0; j < 8; j++)
{
if (crc & 0x8000)
{
crc = (crc << 1) ^ CRC16_CCITT;
}
else
{
crc <<= 1;
}
}
}
return crc;
}
```
这个函数的作用是计算CRC-16-CCITT校验码,输入参数是一个unsigned char类型的指针和一个int类型的长度值,输出结果是一个unsigned short类型的校验码。函数中使用了位操作和循环来实现CRC校验算法,并且采用了CRC-CCITT多项式0x1021作为生成多项式。
C语言实现的CRC16/CCITT-FALSE校验码函数
以下是C语言实现的CRC16/CCITT-FALSE校验码函数代码:
```c
#include <stdint.h>
uint16_t crc16_ccitt_false(const uint8_t *data, size_t length)
{
uint16_t crc = 0xFFFF;
for (size_t i = 0; i < length; ++i) {
crc ^= (uint16_t)data[i] << 8;
for (size_t j = 0; j < 8; ++j) {
if (crc & 0x8000) {
crc = (crc << 1) ^ 0x1021;
} else {
crc = crc << 1;
}
}
}
return crc;
}
```
该函数使用了CRC-CCITT(XModem)算法,生成的校验码长度为16位。传入函数的参数`data`是待校验的数据的首地址,`length`是数据的长度。函数返回计算出的校验码。
阅读全文