C# BCC異或校正法

來源:互聯網
上載者:User

標籤:check   異或   length   字串   進位   i++   upper   data   int   

通訊協議中最後一位是校正位 

採用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

學習了一個上午 搞定了 決定分享下 希望能協助的到剛接觸的同學

 

C# BCC異或校正法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.