写一个数组crc校验码计算的函数
时间: 2023-09-02 13:09:32 浏览: 143
以下是一个简单的C++实现:
```cpp
#include <iostream>
#include <vector>
// 计算数组的CRC校验码
uint16_t crc16(const uint8_t* data, size_t size)
{
const uint16_t polynomial = 0xA001; // 16位CRC多项式
uint16_t crc = 0xFFFF; // 初始值
for (size_t i = 0; i < size; ++i) {
crc ^= static_cast<uint16_t>(data[i]); // 与下一个字节异或
for (size_t j = 0; j < 8; ++j) {
if (crc & 0x0001) {
crc = (crc >> 1) ^ polynomial; // 右移并异或多项式
} else {
crc >>= 1; // 右移
}
}
}
return crc;
}
int main()
{
std::vector<uint8_t> data = {0x01, 0x02, 0x03, 0x04};
uint16_t crc = crc16(data.data(), data.size());
std::cout << "CRC: " << std::hex << crc << std::endl;
return 0;
}
```
这个实现使用了16位CRC多项式0xA001,并且使用了初始值0xFFFF。在计算过程中,我们按照字节顺序对每个字节进行异或,然后对每个位进行计算并进行移位和异或操作。最终的结果就是CRC校验码。
阅读全文