package com.example.agvcontroller.protocol;
|
|
/**
|
* CRC16循环冗余校验码
|
* Created by vincent on 2023/3/13
|
*/
|
public class CRCUtils {
|
|
/**
|
* 一个字节占 8位
|
*/
|
private static final int BITS_OF_BYTE = 8;
|
|
/**
|
* 多项式
|
*/
|
private static final int POLYNOMIAL = 0XA001;
|
|
/**
|
* CRC寄存器默认初始值
|
*/
|
private static final int INITIAL_VALUE = 0XFFFF;
|
|
/**
|
* CRC16 编码
|
* @param bytes 编码内容
|
* @return 编码结果
|
*/
|
public static int crc16(byte[] bytes) {
|
int res = INITIAL_VALUE;
|
for (byte data : bytes) {
|
// 把byte转换成int后再计算
|
res = res ^ (data & 0XFF);
|
for (int i = 0; i < BITS_OF_BYTE; i++) {
|
res = (res & 0X0001) == 1 ? (res >> 1) ^ POLYNOMIAL : res >> 1;
|
}
|
}
|
return res;
|
}
|
|
}
|