FCS校验类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FCS
{
public class FCSstr
{

    public FCSstr()
    {
    }
    public string tobcc(string s)  //帧校验函数FCS
    {
        //获取s对应的字节数组
        byte[] b = Encoding.ASCII.GetBytes(s);
        // xorResult 存放校验结果。注意:初值去首元素值!
        byte xorResult = b[0];
        // 求xor校验和。注意:XOR运算从第二元素开始
        for (int i = 1; i < b.Length; i++)
        {
            //**进行异或运算,^=就是异或运算符,具体可查阅异或运算
            //**异或运算:两个二进制数的每一位进行比较,如果相同则为0,不同则为1,如下面2个10进制数37、     48的二进制值异或结果为21
            //**  37(10)       100101(2)
            //**  48(10)       110000(2)
            //**  21(10)       010101(2)
            //**这里的意思是:如a^=b,就是a与b先进行异或比较,得出的结果赋值给a;
            xorResult ^= b[i];
        }
        //**Convert.ToString(xorResult, 16):将当前值转换为16进制;ToUpper():结果大写;
        //**这里的意思是:将xorResult转换成16进制并大写;

        //**(//**返回的结果为一个两个ASCII码的异或值)
        return Convert.ToString(xorResult, 16).ToUpper();
    }
    public string tobccs(string ss)  //帧校验函数FCS后4位删除,两位校验,两个结束
    {
        //获取s对应的字节数组
        byte[] bs = Encoding.ASCII.GetBytes(ss);
        // xorResult 存放校验结果。注意:初值去首元素值!
        byte xorResults = bs[0];
        // 求xor校验和。注意:XOR运算从第二元素开始
        for (int ia = 1; ia< bs.Length-4; ia++)
        {
            //**进行异或运算,^=就是异或运算符,具体可查阅异或运算
            //**异或运算:两个二进制数的每一位进行比较,如果相同则为0,不同则为1,如下面2个10进制数37、     48的二进制值异或结果为21
            //**  37(10)       100101(2)
            //**  48(10)       110000(2)
            //**  21(10)       010101(2)
            //**这里的意思是:如a^=b,就是a与b先进行异或比较,得出的结果赋值给a;
            xorResults ^= bs[ia];
        }
        //**Convert.ToString(xorResult, 16):将当前值转换为16进制;ToUpper():结果大写;
        //**这里的意思是:将xorResult转换成16进制并大写;

        //**(//**返回的结果为一个两个ASCII码的异或值)
        return Convert.ToString(xorResults, 16).ToUpper();
    }
}

}

猜你喜欢

转载自blog.csdn.net/qq_30725967/article/details/85206991