当前位置: 首页 > news >正文

深圳集团网站开发网站开发公司整合营销传播最基础的形式是

深圳集团网站开发网站开发公司,整合营销传播最基础的形式是,网页版微信怎么退出,衡水 网站建设作者: Herman Ye Galbot Auromix 测试环境: Ubuntu20.04 更新日期: 2023/08/30 注1: Auromix 是一个机器人爱好者开源组织。 注2: 本文在更新日期经过测试,确认有效。 笔者出于学习交流目的, 给…

作者: Herman Ye @Galbot @Auromix
测试环境: Ubuntu20.04
更新日期: 2023/08/30
1 @Auromix 是一个机器人爱好者开源组织。
2 本文在更新日期经过测试,确认有效。

笔者出于学习交流目的,
给出以下ModbusCRC16校验常用的四种函数以及完整示例代码:

1.计算CRC

注意: 此处在末尾进行了高低位交换,可根据需求删减代码交换高低位顺序。

unsigned short calculateModbusCRC16(const vector<uint8_t> &data) {int length = data.size();unsigned short CRC = 0xFFFF; // initial valuefor (int i = 0; i < length; i++) {CRC = CRC ^ data[i]; // XOR byte into least sig. byte of crcfor (int j = 0; j < 8; j++) {if (CRC & 1) {CRC >>= 1;CRC ^= 0xA001;} else {CRC >>= 1;}}}unsigned short swappedCRC = ((CRC >> 8) & 0xFF) | ((CRC & 0xFF) << 8);return swappedCRC;
}

2.添加CRC校验位

注意: 此处进行了高低位交换,可根据需求删减代码交换高低位顺序。


void addModbusCRC16(vector<uint8_t> &data) {unsigned short crc = calculateModbusCRC16(data);// Append CRC bytes to the data vectordata.push_back((crc >> 8) & 0xFF);   // MSBdata.push_back(crc & 0xFF);          // LSB}

3.删除CRC校验位

void removeModbusCRC16(vector<uint8_t> &dataWithCRC) {int length = dataWithCRC.size();// Error checkif (length < 2) {cerr << "Invalid data length" << endl;return;}// Delete CRC at the enddataWithCRC.resize(length - 2);
}

4.比较CRC校验位


bool compareModbusCRC16(const vector<uint8_t> &dataWithCRC) {int length = dataWithCRC.size();// Error checkif (length < 2) {cerr << "Invalid data length" << endl;return false;}// Get data without CRCvector<uint8_t> dataWithoutCRC(dataWithCRC.begin(), dataWithCRC.end() - 2);// Calculateunsigned short calculatedCRC = calculateModbusCRC16(dataWithoutCRC);// Get original CRCunsigned short originalCRC = (dataWithCRC[length - 2] << 8) | dataWithCRC[length - 1];return originalCRC == calculatedCRC;
}

5.完整示例代码

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;unsigned short calculateModbusCRC16(const vector<uint8_t> &data) {int length = data.size();unsigned short CRC = 0xFFFF; // initial valuefor (int i = 0; i < length; i++) {CRC = CRC ^ data[i]; // XOR byte into least sig. byte of crcfor (int j = 0; j < 8; j++) {if (CRC & 1) {CRC >>= 1;CRC ^= 0xA001;} else {CRC >>= 1;}}}unsigned short swappedCRC = ((CRC >> 8) & 0xFF) | ((CRC & 0xFF) << 8);return swappedCRC;
}void addModbusCRC16(vector<uint8_t> &data) {unsigned short crc = calculateModbusCRC16(data);// Append CRC bytes to the data vectordata.push_back((crc >> 8) & 0xFF);   // MSBdata.push_back(crc & 0xFF);          // LSB}void removeModbusCRC16(vector<uint8_t> &dataWithCRC) {int length = dataWithCRC.size();// Error checkif (length < 2) {cerr << "Invalid data length" << endl;return;}// Delete CRC at the enddataWithCRC.resize(length - 2);
}bool compareModbusCRC16(const vector<uint8_t> &dataWithCRC) {int length = dataWithCRC.size();// Error checkif (length < 2) {cerr << "Invalid data length" << endl;return false;}// Get data without CRCvector<uint8_t> dataWithoutCRC(dataWithCRC.begin(), dataWithCRC.end() - 2);// Calculateunsigned short calculatedCRC = calculateModbusCRC16(dataWithoutCRC);// Get original CRCunsigned short originalCRC = (dataWithCRC[length - 2] << 8) | dataWithCRC[length - 1];// Logcout<< "ModbusCRC16 original: "<<hex<< originalCRC<< endl;cout<< "ModbusCRC16 calculated: "<<hex<< calculatedCRC<< endl;return originalCRC == calculatedCRC;
}int main() {// Example data 1vector<uint8_t> deviceData1 = {0x01, 0x10, 0x00, 0x02, 0x00, 0x06, 0x0C, 0x41, 0x20,0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,0x84, 0xC1}; // Example CRC: 0x84, 0xC1// Print original datacout << "Original data 1: ";for (uint8_t byte : deviceData1) {cout << hex << uppercase << setw(2) << setfill('0') << (int)byte << " ";}cout << endl;bool comparedResult=compareModbusCRC16(deviceData1);if (comparedResult)cout<<"Compared result: "<<"TRUE"<<endl;elsecout<<"Compared result: "<<"FALSE"<<endl;// Example data 2cout<<endl;vector<uint8_t> deviceData2 = {0x01, 0x06, 0x00, 0x00, 0x01, 0x02, 0x02};// Example CRC: 0xDA, 0xC7cout << "Original data 2: ";for (uint8_t byte : deviceData2) {cout << hex << uppercase << setw(2) << setfill('0') << (int)byte << " ";}cout << endl;// Add CRC and print modified dataaddModbusCRC16(deviceData2);cout << "Add CRC to original data 2: ";for (uint8_t byte : deviceData2) {cout << hex << uppercase << setw(2) << setfill('0') << (int)byte << " ";}cout << endl;// Remove CRC from dataremoveModbusCRC16(deviceData2);cout << "Remove CRC from modified data 2: ";for (uint8_t byte : deviceData2) {cout << hex << uppercase << setw(2) << setfill('0') << (int)byte << " ";}cout << endl;	return 0;
}
http://www.mmbaike.com/news/28144.html

相关文章:

  • 广州做网站网盘网页版登录入口
  • 在哪里进行网站域名的实名认证深圳seo公司助力网络营销飞跃
  • 品牌策划公司经营范围包括哪些淘宝seo优化怎么做
  • 建个网站大概多少钱青岛网络优化厂家
  • 网站开发的五个阶段公司产品怎样网上推广
  • 免费建设com网站网络营销推广的优势
  • 网站预约功能怎么做搜索引擎优化的含义
  • 网站h标签上海百度seo牛巨微
  • 织梦怎么做手机网站百度网首页官网登录
  • 没有网站可以做百度推广吗推广普通话的意义简短
  • 做网站 有哪些问题企业qq官方下载
  • 有关做洁净工程的企业网站外贸网站有哪些
  • 怎样做网站亮照亮标各引擎收录查询
  • 做网站 注册那类的商标域名收录查询
  • 什么是商业网站自己如何注册一个网站
  • 做教案比较好的网站互联网公司排名
  • 深圳建设网站哪家好品牌设计
  • 用myeclipse做网站域名注册管理中心网站
  • 西宁做腋臭北大网站l免费的网页模板网站
  • 网站建设的代理青岛seo排名收费
  • 做网站哪家公司比较好而且不贵百度搜索网址
  • 网站建设 日志做网页的网站
  • 东莞樟木头做网站哪家好百度关键词代做排名
  • 动态网站开发实训总结6网络营销策划案例
  • wordpress技巧:开启wordpress多站点功能口碑营销的案例
  • 公司网站上传图片网站搜索引擎拓客
  • 今天广西新闻回放seo营销推广全程实例
  • 网站别人帮做的要注意什么东西免费域名注册申请
  • 网站后台登录代码手机怎么搭建属于自己的网站
  • 手机网站建设经典教程网页制作平台有哪些