下面的函数完成的功能是什么呀?能具体解释一下吗?、谢谢大侠们!!!!
uInt16i,j,tmp,CRC;uInt8CRCHi,CRCLo;CRC=0xFFFF;for(i=0;i<length;i++){CRC=buf[i]^CRC;fo...
uInt16 i,j,tmp,CRC;
uInt8 CRCHi, CRCLo;
CRC=0xFFFF;
for(i=0; i<length; i++)
{
CRC=buf[i]^CRC;
for(j=0;j<8;j++)
{
tmp=CRC&0x0001;
CRC=CRC>>1;
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC>>8; 展开
uInt8 CRCHi, CRCLo;
CRC=0xFFFF;
for(i=0; i<length; i++)
{
CRC=buf[i]^CRC;
for(j=0;j<8;j++)
{
tmp=CRC&0x0001;
CRC=CRC>>1;
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC>>8; 展开
2个回答
展开全部
uInt16 i,j,tmp,CRC; //声明i,j,tmp,CRC 4个十六位的无符号长整形变量
uInt8 CRCHi, CRCLo; //声明CRCHi,CRCLo 2个八位无符号长整形变量
CRC=0xFFFF //给CRC赋值
for(i=0; i<length; i++) //length未声明,我猜测应该是buf数组的长度
{
CRC=buf[i]^CRC; // 异或相同的时候为0, 这里是取buf的补码赋给crc
for(j=0;j<8;j++) //
{
tmp=CRC&0x0001; //对CRC&0x0001取布尔值并赋值给tmp ,可以判断crc的奇偶性,如果 temp=1就是奇数。
CRC=CRC>>1; //>>表示将crc右移一位;
if(tmp)
CRC=CRC^0xA001;//如果crc是奇数 crc与0xA001 异或
}
}
CRCLo=CRC&0xFF;// 将crc的低八位赋给crcl0
CRCHi=CRC>>8;// crc右移8位 即:把crc的高八位给crchi
函数的每一步是这样的,结合crc校验的算法 理解一下 希望对你有帮助,crc的校验算法 我忘了,如果可以我们可以一起讨论一下。不懂得再联系
uInt8 CRCHi, CRCLo; //声明CRCHi,CRCLo 2个八位无符号长整形变量
CRC=0xFFFF //给CRC赋值
for(i=0; i<length; i++) //length未声明,我猜测应该是buf数组的长度
{
CRC=buf[i]^CRC; // 异或相同的时候为0, 这里是取buf的补码赋给crc
for(j=0;j<8;j++) //
{
tmp=CRC&0x0001; //对CRC&0x0001取布尔值并赋值给tmp ,可以判断crc的奇偶性,如果 temp=1就是奇数。
CRC=CRC>>1; //>>表示将crc右移一位;
if(tmp)
CRC=CRC^0xA001;//如果crc是奇数 crc与0xA001 异或
}
}
CRCLo=CRC&0xFF;// 将crc的低八位赋给crcl0
CRCHi=CRC>>8;// crc右移8位 即:把crc的高八位给crchi
函数的每一步是这样的,结合crc校验的算法 理解一下 希望对你有帮助,crc的校验算法 我忘了,如果可以我们可以一起讨论一下。不懂得再联系
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
如果我没有猜错的话,uInt8应该是八进制的unsigned long int,uInt16是十六进制的unsigned long int,你的main函数中的typedef 子句没有给出来。
uInt16 i,j,tmp,CRC; //声明i,j,tmp,CRC 4个十六进制无符号长整形变量
uInt8 CRCHi, CRCLo; //声明CRCHi,CRCLo 2个八进制无符号长整形变量
CRC=0xFFFF //给CRC赋值
for(i=0; i<length; i++) //length未声明,我猜测应该是buf数组的长度
{
CRC=buf[i]^CRC; // ^还真没见过
for(j=0;j<8;j++) //
{
tmp=CRC&0x0001; //对CRC&0x0001取布尔值并赋值给tmp
CRC=CRC>>1; //>>应该是c++中的输入流符号
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC>>8; 我也就只能推测出这些了 希望对你有用
uInt16 i,j,tmp,CRC; //声明i,j,tmp,CRC 4个十六进制无符号长整形变量
uInt8 CRCHi, CRCLo; //声明CRCHi,CRCLo 2个八进制无符号长整形变量
CRC=0xFFFF //给CRC赋值
for(i=0; i<length; i++) //length未声明,我猜测应该是buf数组的长度
{
CRC=buf[i]^CRC; // ^还真没见过
for(j=0;j<8;j++) //
{
tmp=CRC&0x0001; //对CRC&0x0001取布尔值并赋值给tmp
CRC=CRC>>1; //>>应该是c++中的输入流符号
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC>>8; 我也就只能推测出这些了 希望对你有用
追问
这是labview 公式节点里面的一个函数。CRC好像是CRC校验方面的,但我还是看不懂,如何完成CRC校验的??^ 是安位异或的意思。。
追答
CRC要是我记得不错的话,应该是大学课程《计算机网络原理》一书里面的循环冗余校验(cycle redundence check),这方面很复杂,涉及到了网络原理中的数据链路层接受数据是否在传输的过程中出现了错误。就是拿发送方要发送的数据(二进制)*2的n次方(n为约定的除数的位数),在把所等的数与除数进行模2运算,得到的榆树就是fcs(貌似记错了),也就是循环校验冗余码,在把fcs加到上面所说的被除数上作为发送方的发送数据,接收方也做同样的操作进行校验,若余数为零,则数据传输无误,否则有误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询