flutter实现CRC16 MODBUS校验算法

最近开发过程中遇到ModelBus的CRC校验位计算,弄了好久才出来的方法

String getCrc(String data) {
    int crcValue = 0xFFFF;
    List<int> dataList = Utils.formatSentData(data);
    for (int i = 0; i < dataList.length; i++) {
      crcValue ^= dataList[i];
      for (int j = 0; j < 8; j++) {
        int isCrc = crcValue & 0x0001;
        if (isCrc != 0) {
          crcValue >>= 1;
          crcValue ^= 0xA001;
        } else {
          crcValue >>= 1;
        }
      }
    }
    String crcString = crcValue.toRadixString(16);
    List<String> crcArr = [];
    crcArr.add(crcString.substring(2, 4));
    crcArr.add(crcString.substring(0, 2));
    return (crcArr.join(''));
  }

 

posted @ 2025-09-05 14:51  江南烟雨楼-柯南  阅读(13)  评论(0)    收藏  举报
Live2D
/* 看板娘 */