永发信息网

关于校验和计算方面的C++代码,哪位大侠帮忙解读一下,小弟初学,不太懂!谢谢!

答案:1  悬赏:40  手机版
解决时间 2021-01-23 12:47
#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));
}
这一小段吧!包括它的逻辑关系,谢谢!
最佳答案
哪里不懂?
补充点操作符:

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)|=,&=,^= 分别对应|&^三种操作符的复合操作符。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北京人说的二小是什么意思?
千姿彩日化地址好找么,我有些事要过去
Look at that red car! I think it’sin the
华凯教育芙蓉学前班地址在什么地方,想过去办
10004000这个数字,怎么读,是读作一千万四千
我的无线路由器可不可以接收别人的无线信号?
三利日化怎么去啊,我要去那办事
汕头市特殊教育学校地址在什么地方,我要处理
是不是springfields的精油一定要去香港啊澳门
蜜雪儿化妆品地址好找么,我有些事要过去
一个圆柱锯成三段,一共增加()面.A.3B.4C.
玉兰家教地址在什么地方,想过去办事
吃多了怎么才能吐出来
读美洲部分区域图,回答下列问题.(1)写出
荣盛化妆品折扣店怎么去啊,我要去那办事
推荐资讯
冒险岛的宠物扩大移动范围
库里为什么投不进空位三分
单选题因开采铁矿而发展起来的城市是A.玉门B.
大同10兆宽带电信好吗多钱
Jack hurt his leg yesterday. Now he is in
才达斯教育地址在哪,我要去那里办事
中央电视台《幸运52》你看过吗?现在就试试吧
下列实验操作导致所读出的数值比真实值小的是
属于法律赋予公民的隐私权包括①公民有享有私
玛玛洛可少儿英语(燕郊校区)地址有知道的么?
第五元素的药多少钱
怎么给一台电脑配置多个IP?高手都来
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?