CRC16算法之一:CRC16-CCITT-FALSE算法的java實現
阿新 • • 發佈:2018-09-18
-c params ron 開始 return amp number urn 文章
CRC16算法系列文章:
CRC16算法之一:CRC16-CCITT-FALSE算法的java實現
CRC16算法之二:CRC16-CCITT-XMODEM算法的java實現
CRC16算法之三:CRC16-CCITT-MODBUS算法的java實現
前言
JDK裏包含了CRC32的算法,但是沒有CRC16的,網上搜了一堆沒有找到想要的,索性自己實現
註意:CRC16算法分為很多種,本篇文章中,只講其中的一種:CRC16-CCITT-FALSE算法
CRC16算法系列之一:CRC16-CCITT-FALSE算法的java實現
功能
1、支持short類型
2、支持int類型
3、支持數組任意區域計算
實現
- /**
- * crc16-ccitt-false加密工具
- *
- * @author eguid
- *
- */
- public class CRC16 {
- /**
- * crc16-ccitt-false加/解密(四字節)
- *
- * @param bytes
- * @return
- */
-
public static int crc16(byte[] bytes) {
- return crc16(bytes, bytes.length);
- }
- /**
- * crc16-ccitt-false加/解密(四字節)
- *
- * @param bytes -字節數組
- * @return
- */
- public static int crc16(byte[] bytes, int len) {
- int crc = 0xFFFF;
- for (int j = 0; j < len; j++) {
-
crc = ((crc >>> 8) | (crc << 8)) & 0xffff;
- crc ^= (bytes[j] & 0xff);// byte to int, trunc sign
- crc ^= ((crc & 0xff) >> 4);
- crc ^= (crc << 12) & 0xffff;
- crc ^= ((crc & 0xFF) << 5) & 0xffff;
- }
- crc &= 0xffff;
- return crc;
- }
- /**
- * crc16-ccitt-false加/解密(四字節)
- *
- * @param bytes
- * @return
- */
- public static int crc16(byte[] bytes, int start, int len) {
- int crc = 0xFFFF;
- for (; start < len; start++) {
- crc = ((crc >>> 8) | (crc << 8)) & 0xffff;
- crc ^= (bytes[start] & 0xff);// byte to int, trunc sign
- crc ^= ((crc & 0xff) >> 4);
- crc ^= (crc << 12) & 0xffff;
- crc ^= ((crc & 0xFF) << 5) & 0xffff;
- }
- crc &= 0xffff;
- return crc;
- }
- /**
- * crc16-ccitt-false加/解密
- *
- * @param bytes
- * -字節數組
- * @return
- */
- public static short crc16_short(byte[] bytes) {
- return crc16_short(bytes, 0, bytes.length);
- }
- /**
- * crc16-ccitt-false加/解密(計算從0位置開始的len長度)
- *
- * @param bytes
- * -字節數組
- * @param len
- * -長度
- * @return
- */
- public static short crc16_short(byte[] bytes, int len) {
- return (short) crc16(bytes, len);
- }
- /**
- * crc16-ccitt-false加/解密(兩字節)
- *
- * @param bytes
- * @return
- */
- public static short crc16_short(byte[] bytes, int start, int len) {
- return (short) crc16(bytes, start, len);
- }
- }
CRC16算法之一:CRC16-CCITT-FALSE算法的java實現