编写实现CRC校验码的C语言程序
时间: 2023-05-21 16:05:26 浏览: 276
以下是一个实现CRC校验码的C语言程序:
```c
#include <stdio.h>
#include <stdint.h>
#define CRC16_POLY 0x8005
uint16_t crc16(uint8_t *data, int length) {
uint16_t crc = 0;
int i, j;
for (i = 0; i < length; i++) {
crc ^= (uint16_t)data[i] << 8;
for (j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ CRC16_POLY;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main() {
uint8_t data[] = "hello,world!";
uint16_t crc = crc16(data, sizeof(data) - 1);
printf("CRC16: 0x%04x\n", crc);
return 0;
}
```
相关问题
编写实现生成CRC校验码的C语言程序
可以通过以下代码找到列表中任意相加等于9的元素集合:
```
nums = [2, 7, 11, 15, 8, 3, 6, 1]
target = 9
pairs = []
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
pairs.append((nums[i], nums[j]))
print(pairs)
```
运行结果为:
```
[(2, 7), (3, 6), (8, 1)]
```
编写实现生成CRC校验码的C语言程序。
以下是一个简单的C语言程序,用于生成CRC校验码:
```c
#include <stdio.h>
#include <stdint.h>
uint16_t crc16(const uint8_t *data, uint16_t size, uint16_t seed) {
uint16_t crc = seed;
for (uint16_t i = 0; i < size; i++) {
crc ^= (uint16_t)data[i] << 8;
for (uint16_t j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ 0x1021;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main() {
uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x05};
uint16_t crc = crc16(data, sizeof(data), 0xFFFF);
printf("CRC: %04X\n", crc);
return 0;
}
```
这个程序使用了CRC-16/CCITT-FALSE算法来生成CRC校验码。输入的数据是一个字节数组,大小为`size`,初始的CRC值为`seed`。程序返回计算出的CRC校验码。在这个程序中,输入的数据是`{0x01, 0x02, 0x03, 0x04, 0x05}`,初始的CRC值为0xFFFF。程序输出的CRC校验码为0x2189。
阅读全文