目录[-]

1、CRC16 校验和计算

# 进行crc16 校验和计算

std::string getCrc16(std::string str){
  std_msgs::UInt8MultiArray data__;
  uint16_t crc = 0xFFFF;
  uint16_t polynomial = 0x1021;
  uint16_t mCrc = 0;
  uint8_t local_data_ = 0;
  uint8_t local_data_sum_ = 0;
  std_msgs::UInt8MultiArray data__;
  for(int i=0;i< str.length();i++){
    if(i==0 || i%2==0){
      local_data_ = char2dec(str[i]);
    }else{
      local_data_sum_ = local_data_ * 16 + char2dec(str[i]);
      local_data_ = 0;
      data__.data.push_back(local_data_sum_);
    }
  }
  for(int i=0; i < data__.data.size(); i++){
    for(int index = 0 ; index < 8; index++){
      mCrc = ((data__.data[i]<<index) & 0x80)^((crc & 0x8000)>>8);
      crc = crc<<1;
      if(mCrc != 0){
        crc^=polynomial;
      }
    }
  }
  std::string temp_ = DecIntToHexStr(crc);
  return temp_;
}