您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

25 行
594 B

  1. #include "crc.h"
  2. quint16 calculateCrc(const QByteArray &data)
  3. {
  4. quint16 crc = 0xFFFF; // MODBUS初始值
  5. const quint16 polynomial = 0xA001; // MODBUS多项式(0x8005的反转)
  6. for (int i = 0; i < data.size(); ++i)
  7. {
  8. crc ^= static_cast<quint8>(data.at(i));
  9. for (int bit = 0; bit < 8; ++bit)
  10. {
  11. if (crc & 0x0001)
  12. { // 检查最低位
  13. crc = (crc >> 1) ^ polynomial; // 右移并异或
  14. } else
  15. {
  16. crc >>= 1; // 仅右移
  17. }
  18. }
  19. }
  20. return crc;
  21. }