1. 程式人生 > >FCS校驗類

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();
    }
}

}