大家好,又见面了,我是你们的朋友全栈君。
uint16_t crc_reflect(uint16_t data, int32_t len)
{
uint16_t ret = data & 0x01;
for (int32_t i = 1; i < len; i++) {
data >>= 1;
ret = (ret << 1) | (data & 0x01);
}
return ret;
}
uint16_t calculateCRC(const char *data, int32_t len)
{
uint16_t crc = 0xFFFF;
while (len--) {
const uint8_t c = *data++;
for (int32_t i = 0x01; i & 0xFF; i <<= 1) {
bool bit = crc & 0x8000;
if (c & i)
bit = !bit;
crc <<= 1;
if (bit)
crc ^= 0x8005;
}
crc &= 0xFFFF;
}
crc = crc_reflect(crc & 0xFFFF, 16) ^ 0x0000;
return (crc >> 8) | (crc << 8); // swap bytes
}
此算法为 Qt源码中摘录,通过本机测试,亲测有效
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126468.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...