zoukankan      html  css  js  c++  java
  • C# BCC异或校验法

    通讯协议中最后一位是校验位 

    采用BCC(异或校验)法

    这个怎么解释?

    就是 把16进制的字符串转换成byte[]数据,依次拿出来进行异或一下 然后返回的值和校验位对比下 看看对不对

    例如:

    232301FE313233343536373839303132333435363701001E0F01021226270001383938363032623531333136353033393731363001009E

    最后一位是9E 十进制为 158

    那么我们就截取9E前面部分

    232301FE313233343536373839303132333435363701001E0F0102122627000138393836303262353133313635303339373136300100

    传入方法

    /// <summary>
    /// BCC和校验代码
    /// </summary>
    /// <param name="data">需要校验的数据包</param>
    /// <returns></returns>
    public byte Get_CheckXor(byte[] data)
    {
    byte CheckCode = 0;
    int len = data.Length;
    for (int i = 0; i < len; i++)
    {
    CheckCode ^= data[i];
    }
    return CheckCode;
    }

    返回结果 一样是158

    如果还没看懂?我们再转回16进制

    /// <summary>
    /// BCC和校验代码返回16进制
    /// </summary>
    /// <param name="data">需要校验的数据包</param>
    /// <returns></returns>
    public string GetBCCXorCode(byte[] data)
    {
    byte CheckCode = 0;
    int len = data.Length;
    for (int i = 0; i < len; i++)
    {
    CheckCode ^= data[i];
    }
    return Convert.ToString(CheckCode, 16).ToUpper();
    }

    返回9E

    学习了一个上午 搞定了 决定分享下 希望能帮助的到刚接触的同学

  • 相关阅读:
    spring揭秘读书笔记----spring的ioc容器之BeanFactory
    spring启动加载过程源码分析
    java线程数过高原因分析
    spring揭秘读书笔记----ioc的基本概念
    git merge rebase的区别及应用场景
    spring实现定时任务
    jetty.xml解析
    Hackthebox--------irked
    CTF之信息泄漏
    CTF web题型解题技巧
  • 原文地址:https://www.cnblogs.com/linyijia/p/7928272.html
Copyright © 2011-2022 走看看