[原]CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现

Author Avatar
eguid 2月 12, 2018
  • 在其它设备中阅读本文章

#

CRC16算法系列文章



# CRC16算法之一:CRC16-CCITT-FALSE算法的java实现


# CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现


# CRC16算法之三:CRC16-CCITT-MODBUS算法的java实现


#

前言



CRC16算法有很多种,本篇文章会介绍其中的CRC16-CCITT-XMODEM算法

## 功能

实现CRC16-CCITT-XMODEM算法

支持int、short类型

支持选择数组区域计算

## 实现
package cc.eguid.crc16;

/
crc16多项式算法 @author eguid
/
public class CRC16 {

/

CRC16-XMODEM算法(四字节) @param bytes
@return /
public static int crc16_ccitt_xmodem(byte[] bytes) {
return crc16_ccitt_xmodem(bytes,0,bytes.length);
}

/
CRC16-XMODEM算法(四字节) @param bytes
@param offset @param count
@return /
public static int crc16_ccitt_xmodem(byte[] bytes,int offset,int count) {
int crc = 0x0000; // initial value
int polynomial = 0x1021; // poly value
for (int index = offset; index < count; index++) {
byte b = bytes[index];
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7 - i) & 1) == 1);
boolean c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit)
crc ^= polynomial;
}
}
crc &= 0xffff;
return crc;
}

/

CRC16-XMODEM算法(两字节) @param bytes
@param offset @param count
@return /
public static short crc16_ccitt_xmodem_short(byte[] bytes,int offset,int count) {
return (short)crc16_ccitt_xmodem(bytes,offset,count);
}
/* CRC16-XMODEM算法(两字节)
@param bytes @param offset
@param count @return
*/
public static short crc16_ccitt_xmodem_short(byte[] bytes) {
return crc16_ccitt_xmodem_short(bytes,0,bytes.length);
}

}
—end—


作者:eguid_1 发表于 2018/02/12 20:25:42 原文链接 https://blog.csdn.net/eguid_1/article/details/79318654


阅读:79

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本文链接:https://blog.eguid.cc/2018/02/12/原-CRC16算法之二:CRC16-CCITT-XMODEM算法的java实现/