案例 通信帧异或校验分析

 

 

#include <stdio.h>
//0x6a,0x2d,0x00,0x01,0x00,0x00,0x00,0x00的异或结果是0x46
int main()
{
    int i=0;
    //要校验的个数
    int len=8;               
    //下面是要校验的数组
    unsigned char str[]={0x6a,0x2d,0x00,0x01,0x00,0x00,0x00,0x00};
    //用于保存异或校验的结果
    unsigned char XorData=0; 
    //设置一个指向数组的指针
    unsigned char *pstr=str;
    for(i=0;i<len;i++)
    {
        XorData^=*pstr++;
    }
   printf("%x \n",XorData);
   return 0;
}

不过这里有个奇怪的问题,

我直接用数组的名字进行加加不可以吗?

为什么需要创建一个指针才能运行成功?

 

之后我想,进行传参,就是把数组名字传入到形参中试一下.

虽然数组名字是一个常量的指针,不能进行加加运算.

但是如果数组名字传入到形参中应该是可以的.

结果如我猜想,是可以的,但是我用的是在线的编译器,不知道是不是通用的规则.

#include <stdio.h>
//异或校验函数
unsigned char XOR_Check(unsigned char *ptr,int len)
{
    int i=0;               
    //用于保存异或校验的结果
    unsigned char XorData=0; 
    for(i=0;i<len;i++)
    {
        XorData^=*ptr++;
    }    
    return XorData;
}
int main()
{
    //要校验的个数
    int len=8;               
    //下面是要校验的数组,如果校验正确,异或校验结果应该是0x46
    unsigned char str[]={0x6a,0x2d,0x00,0x01,0x00,0x00,0x00,0x00};
    //用于保存异或校验的结果
    unsigned char XorData=0; 
    //调用校验函数,这里str虽然是数组名字,是一个常量指针,但是我把他当做形参传入
//之后再子函数里可以进行加加操作了.
XorData=XOR_Check(str,len); printf("%x \n",XorData); return 0; }

 

posted @ 2020-12-03 10:34  GXTon  阅读(301)  评论(0编辑  收藏  举报