#include "crc.h" quint16 calculateCrc(const QByteArray &data) { quint16 crc = 0xFFFF; // MODBUS初始值 const quint16 polynomial = 0xA001; // MODBUS多项式(0x8005的反转) for (int i = 0; i < data.size(); ++i) { crc ^= static_cast(data.at(i)); for (int bit = 0; bit < 8; ++bit) { if (crc & 0x0001) { // 检查最低位 crc = (crc >> 1) ^ polynomial; // 右移并异或 } else { crc >>= 1; // 仅右移 } } } return crc; }