JAVA CRC16校驗碼計算

2021-08-21 18:15:09 字數 1209 閱讀 2463

package com.hcs.lqjc.controller.dongdahengfeng.modbus.utils;

/** * @author lwt

* @date 2018-06-26

* * crc16校驗碼計算

* * (1).預置1個16位的暫存器為十六進製制ffff(即全為1),稱此暫存器為crc暫存器;

* (2).把第乙個8位二進位制資料(既通訊資訊幀的第乙個位元組)與16位的crc暫存器的低

* 8位相異或,把結果放於crc暫存器;

* (3).把crc暫存器的內容右移一位(朝低位)用0填補最高位,並檢查右移後的移出位;

* (4).如果移出位為0:重複第3步(再次右移一位);如果移出位為1:crc暫存器與多項式a001(1010 0000 0000 0001)進行異或;

* (5).重複步驟3和4,直到右移8次,這樣整個8位資料全部進行了處理;

* (6).重複步驟2到步驟5,進行通訊資訊幀下乙個位元組的處理;

* (7).將該通訊資訊幀所有位元組按上述步驟計算完成後,得到的16位crc暫存器的高、低

* 位元組進行交換;

* (8).最後得到的crc暫存器內容即為crc16碼。(注意得到的crc碼即為低前高後順序)

*/public class crc16

int num = len / 2;

byte para = new byte[num];

for (int i = 0; i < num; i++)

return getcrc(para);

}/**

* 計算crc16校驗碼

** @param bytes 位元組陣列

* @return 校驗碼

* @since 1.0

*/public static string getcrc(byte bytes) else }}

//結果轉換為16進製制

string result = integer.tohexstring(crc).touppercase();

if (result.length() != 4)

//交換高低位

return result.substring(2, 4) + result.substring(0, 2);

}public static void main(string args)

}

C XOR CRC16 校驗碼計算類

cyclic redundancy check迴圈冗餘檢驗,是基於資料計算一組效驗碼,用於核對資料傳輸過程中是否被更改或傳輸錯誤。1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 ...

校驗碼 奇偶校驗碼

1.奇偶校驗碼 通過在編碼中增加一位校驗位來使編碼中1的個數為奇數或者偶數,校驗位可以在原編碼的前面或者後面加。通過加入校驗位後的1個數是奇數還是偶數,可分為兩種 奇校驗 1的個數為奇數 偶校驗 1的個數為偶數 下圖為奇校驗和偶校驗的設定方法。例如 m的ascii碼77,二進位制表示為0100110...

校驗碼 迴圈冗餘校驗碼

迴圈冗餘校驗碼,又稱crc碼。它利用生成多項式來為k個資料位產生r個校驗位來進行編碼。其編碼長度為k r。迴圈冗餘校驗碼由兩部分組成,左邊為資訊碼 資料 右邊為校驗碼,如下圖 若資訊碼佔k位,則校驗碼就佔n k位,其中,n為crc碼的字長,所以又稱為 n,k 碼。校驗碼位數越多,校驗能力越強。crc...