CRC-16校验c++
时间: 2023-12-22 22:03:57 浏览: 110
以下是一个简单的 C++ 实现 CRC-16 校验的例子:
```cpp
#include <iostream>
#include <cstdlib>
#include <cstring>
#define POLY 0x1021
unsigned short crc16(const char *data_p, unsigned short length) {
unsigned char i;
unsigned int data;
unsigned int crc = 0xffff;
if (length == 0) {
return (~crc);
}
do {
for (i = 0, data = (unsigned int) (0xff & *data_p++);
i < 8;
i++, data >>= 1) {
if ((crc & 0x0001) ^ (data & 0x0001)) {
crc = (crc >> 1) ^ POLY;
} else {
crc >>= 1;
}
}
} while (--length);
crc = ~crc;
data = crc;
crc = (crc << 8) | (data >> 8 & 0xff);
return (crc);
}
int main() {
char data[] = "Hello, world!";
unsigned short checksum = crc16(data, strlen(data));
std::cout << "CRC-16 checksum: " << checksum << std::endl;
return 0;
}
```
该实现使用了 CRC-16 的标准生成多项式 0x1021,以及初始值 0xffff。对于输入数据中的每个字节,它将其视为一个 8 位的二进制数,并使用除法运算进行计算。最后,将 CRC 值取反并交换高低字节即可得到校验和。在此例子中,我们计算了字符串 "Hello, world!" 的校验和,并输出结果。
阅读全文