关于校验和计算方面的C++代码,哪位大侠帮忙解读一下,小弟初学,不太懂!谢谢!
2016-07-05 17:03
316 查看
关于校验和计算方面的C++代码,哪位大侠帮忙解读一下,小弟初学,不太懂!谢谢!
分享| 2010-09-0316:51李志鹏6076 | 浏览
755 次
#include "stdafx.h" #include "CheckSum.h" #define CHECKVALUE(pt,nl) if((btData==NULL)||(nLength<=0)){AfxMessageBox("无效数组!");return -1;} CCheckSum::CCheckSum() { } CCheckSum::~CCheckSum() { } //CCITT V.41,x16 + x12 + x5 + 1 WORD CCheckSum::CCITT_CRC_16(BYTE* btData,int nLength) { CHECKVALUE(btData,nLength); WORD CRC=0; BYTE j; int i; for(i=0;i<nLength;i++) { CRC^=(btData[i]<<8); for (j=0;j<8;j++) { if(CRC&0x8000)CRC=((CRC<<1)^0x1021); else CRC<<=1; } } return ((CRC>>8)+(CRC<<8));/* 应用时低在先 */ } //ANSI CRC-16,x16 + x15 + x2 + 1 WORD CCheckSum::ANSI_CRC_16(BYTE* btData,int nLength) { CHECKVALUE(btData,nLength); WORD CRC=0xFFFF; BYTE j,Tmp=0; int i; for(i=0;i<nLength;i++) { CRC^=btData[i]; for (j=0;j<8;j++) { Tmp=CRC&0x0001; CRC=CRC>>1; if(Tmp)CRC=(CRC^0xA001); } } return ((CRC>>8)+(CRC<<8)); /* 应用时高在先 */ }
如果嫌多的话,那就请详细的解释一下WORD CCheckSum::CCITT_CRC_16(BYTE* btData,int nLength) { CHECKVALUE(btData,nLength); WORD CRC=0; BYTE j; int i; for(i=0;i<nLength;i++) { CRC^=(btData[i]<<8); for (j=0;j<8;j++) { if(CRC&0x8000)CRC=((CRC<<1)^0x1021); else CRC<<=1; } } return ((CRC>>8)+(CRC<<8));/* 应用时低在先 */ } 这一小段吧!包括它的逻辑关系,谢谢!
2010-09-03
19:03
提问者采纳
哪里不懂? 补充点操作符: 1) |按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。 2) & 按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时,result中对应位为1,否则为0。 3)^ 按位异或操作符:result=exp1^exp2;当exp1和exp2中对应位不相同时,result中对应位为1,否则为0。 4)~ 反转操作符:将位容器中的所有位都反转,1变为0,0变为1。 5)<< 按位左移操作符:exp<<n,将容器中所有的位向左移n位,空出的位用0填充。 6) p>> 按位右移操作符:exp>>n,将容器中所有的位向右移n位,空出的位用0填充。 7)|=,&=,^= 分别对应|&^三种操作符的复合操作符。
相关文章推荐
- c++书籍推荐
- CRC16 生成校验
- c++面向对象编程入门(一)
- VC++界面编程之--阴影窗口的实现详解
- C++ 类的静态成员
- C/C++堆、栈及静态数据区详解
- C++中变量使用前必须初始化,否则报错~
- C++ tricks
- 解决C/C++程序执行一闪而过的方法(三种办法)
- C++引用调用、内联函数、带默认形参值的函数
- 决策树生成c++实现(不含剪枝)
- 在C++中for、if...内定义的变量在其之外就失效了~
- c/c++ 管道编程
- Socket通信原理探讨(C++为例)
- C语言中scanf被跳过-求大神解决
- 3DES加解密 C语言
- C++ Scoket的升级版(多态的运用)
- C语言之计算字符串最后一个单词的长度,单词以空格隔开
- C语言位运算
- 2016年,我们为什么要学习C++?