java crc16高低字节_Java CRC16校验算法实现

前言

最近在操作蓝牙的时候,遇到一个需求,按照协议需要有一个CRC16的校验,方便协议传输的时候校验接受的值是不是正确

算法描述

CRC16 校验算法:

校验(CRC)占用两个字节,包含了一个 16 位的二进制值。CRC 值由传输设备

计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算 CRC 值,然后与

接收到的 CRC 域中的值进行比较,如果这两个值不相等,就表示数据传输发生了错

误。生成一个 CRC 的流程为:

第一步:预置一个 16 位寄存器为 0FFFFH(全 1)

,称之为 CRC 寄存器。

第二步:把数据帧中的第一个字节的 8 位与 CRC 寄存器中的低位字节进行异或

运算,结果存回 CRC 寄存器。

第三步:将 CRC 寄存器向右移一位,最高位填以 0,最低位移出并检测。

第四步:如果最低位为 0:重复第三步(下一次移位);如果最低位为 1:将 CRC

寄存器与生成多项式(CRC16 多项式对应值 A001H)进行异或运算。

第五步:重复第三步和第四步直到 8 次移位。这样处理完了一个完整的八位。

第六步:重复第二步到第五步来处理下一个八位,直到所有的字节处理结束。

最终 CRC 寄存器的值就是 CRC 的值

以下是工具类 对外接口是calcCrc16(byte[] data) 最后一个方法是需求需要 不是包含在crc里面的

public class CRC16Util {

static byte[] crc16_tab_h = {(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值