zoukankan      html  css  js  c++  java
  • 案例 通信帧异或校验分析

    #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 
    ",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 ",XorData); return 0; }
  • 相关阅读:
    jeecg接口开发及权限实现原理
    Jeecg中通过Spring_AOP+注解方式实现日志的管理
    Jeecg踩坑不完全指南
    在jeecg中如何配置多对一和多对多的关系
    一致性哈希算法
    到底什么是哈希Hash?
    如何正确实现 Java 中的 HashCode
    Hash和HashCode深入理解
    关于源码
    MySQL存储过程的创建及调用
  • 原文地址:https://www.cnblogs.com/chulin/p/14078165.html
Copyright © 2011-2022 走看看