vc++ CRC16-CCITT循环码验证算法
来源:互联网 发布:约束满足问题 推荐算法 编辑:程序博客网 时间:2024/05/21 06:12
这段时间做串口通信总结的:
方法:先从EditBox读取十进制字符串数据,转化为十进制整数,再进行 CRC16-CCITT循环码验证算法,求的CRC值,再转化为十六进制数发送到串口。
代码:
UpdateData(TRUE);//更新,读取数据int lenchar=17;int dat;char *DataSend=(char *)calloc(lenchar, sizeof(char));//要发送的数据DataSend[0]=0x2;DataSend[1]=0x11;DataSend[2]=0x22;int *datatmp=(int *)calloc(6, sizeof(int));dat=atoi(m_EditZ2);//转换EidtBox中的十进制字符串为十进制整数TenToHex(dat, datatmp);//将十进制整数转化为十六进制数DataSend[3]=datatmp[4];DataSend[4]=datatmp[5];dat=atoi(m_EditZx);TenToHex(dat, datatmp);DataSend[5]=datatmp[4];DataSend[6]=datatmp[5];dat=atoi(m_EditC2);TenToHex(dat, datatmp);DataSend[7]=datatmp[4];DataSend[8]=datatmp[5];dat=atoi(m_EditS2);TenToHex(dat, datatmp);DataSend[9]=datatmp[4];DataSend[10]=datatmp[5];dat=atoi(m_EditZy);TenToHex(dat, datatmp);DataSend[11]=datatmp[4];DataSend[12]=datatmp[5];dat=atoi(m_EditZ0);TenToHex(dat, datatmp);DataSend[13]=datatmp[4];DataSend[14]=datatmp[5];dat=CRCCCITT(lenchar, DataSend);//求CRCCCITT循环码////若循环码为负值,则需要做一下处理,这是我猜出来的,但是经过验证,结果确实对的。知其然而不知其所以然!!! if (dat<0){dat=abs(dat)-1;}TenToHex(dat, datatmp);DataSend[15]=datatmp[5];//此时与上面的不同DataSend[16]=datatmp[4];
将十进制整数转化为十六进制数:TenToHex(dat, datatmp)函数的实现(假设dat只有两个字节大小):
void CDialog2::TenToHex(int c, int *b){for (int i=0; i<6; i++){b[i]=0;}int n,k=1,j;int i=0;if(c<256){b[4]=0;b[5]=c;}else{b[0]=c%16;c=c/16;while(c>16){b[k]=c%16;k++;c=c/16;}b[k]=c;b[4]=b[3]*16+b[2];b[5]=b[1]*16+b[0];}}
求CRCCCITT循环码:
int CDialog2::CRCCCITT(int lenchar, char *data){ int len,CRC=0;len=lenchar-2;int poly =0x8408;for (int i=0; i<len; i++){CRC=CRC^data[i];for (int j=0; j<8; j++){if ((CRC&0x0001)!=0){CRC>>=1;CRC=CRC^poly;}else{CRC>>=1;}}}return CRC;}
独立的求CRC-CCITT程序:
int CRCCCITT(int len, char *data){ int CRC=0;int poly =0x8408;for (int i=0; i<len; i++){CRC=CRC^data[i];for (int j=0; j<8; j++){if ((CRC&0x0001)!=0){CRC>>=1;CRC=CRC^poly;}else{CRC>>=1;}}}return CRC;}
- vc++ CRC16-CCITT循环码验证算法
- CRC16-CCITT 的算法
- CRC16-CCITT 的算法
- CCITT-CRC16
- ccitt crc16
- crc16 ccitt 单片机与java匹配算法
- CRC16-CCITT校验算法实现(C#版)
- Java实现CRC16 CCITT
- CRC16 验证算法
- CCITT标准CRC16(1021) Java代码
- CCITT标准CRC16(1021) Java代码
- CRC-CCITT算法
- 循环码
- CRC16算法
- CRC16算法函数
- 几种CRC16算法
- 几种CRC16算法
- Modbus RTU CRC16算法
- 切!原来进入500强就那么简单啊——前IBM,HP,Dell员工揭开外企的招聘内幕
- 适配器模式
- hibernate,删除一个对象。
- sql语句 一些常用的技巧 修改主健sql语句,修改默认时间sql语句,添加默认值sql语句
- 光线试验
- vc++ CRC16-CCITT循环码验证算法
- Palindrome poj 1159
- 如何用SQL语句替换字段中的某个字符
- 用Tunnelblick在Mac下配置OpenVPN
- 一组经典的JS函数
- 初次接触config文件
- 标准C++类std::string的 内存共享和Copy-On-Write技术
- VC6绿色版中英文双版
- Codeforces Beta Round #75 Igloo Skyscraper