Java实现CRC编码

本文介绍了CRC编码的基本概念、编码过程,并通过一个具体的算法示例详细阐述了CRC编码的计算方法。使用Java编写代码实现了CRC编码,通过提取字符串数据、计算CRC值,最后得到了六字节的红外控制码。文章末尾作者分享了个人动态和新年祝福。
摘要由CSDN通过智能技术生成

一、CRC编码简介

CRC 的英文全称为 Cyclic Redundancy Check(Code),中文名称为循环冗余校验(码)。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。

二、CRC编码过程

以下步骤将描述 6 字节红外控制码生成过程:

1.从二维码的中依次顺序提取前 2 个英文字母、最后 2 个英文字母(X、x 除外,取英文字母 ASCII 值为原始数据),并从中提取出多项式 g(x)(多项式的最高位为 x16,最低为 1);

2.预置 1 个 16 位的寄存器为十六进制 FFFF(即全为 1),称此寄存器为 CRC 寄存器;

3.把第一个 8 位二进制数据(既原始数据的第一个字节)与 16 位的 CRC 寄存器的低8 位相异或,把结果放于 CRC 寄存器,高八位数据不变;

4.CRC 寄存器向右移一位,MSB(最高位)补零,并检查右移后的移出位 LSB(最低位)。

5.如果 LSB 为 0,重复第 4 步;若 LSB 为 1,CRC 寄存器与多项式码相异或。

6.重复第 4 与第 5 步直到 8 次移位全部完成。此时一个 8-bit 数据处理完毕。

7.重复第 3 至第 5 步直到将剩下 3 个原始数据全部处理完成。

8.最终 CRC 寄存器的内容即为 CRC 值。

9.取 CRC 的得高八位作为红外控制码的第一字节,按顺序取原始数据为红外控制码的二、三、四、五字节,取 CRC 值的低八位为红外控制码的第六字节。

三、算法示例

从二维码中提取的字符串数据为:<Aa12x16,Fg.5tx15/x2+\1/hgBb>,则提取出的 4 个英文字符为 AaBb,多项式 g(x)=x16+x15+x2+1;

提取原始数据为 0x41、 0x61、 0x42 、0x62,多项式码为 0xA001(由多项式忽略了最高位的"1",得到生成项是 0x8005,其中 0xA001 为 0x8005 按位颠倒之后的结果);计算得到的 CRC 码值为 0x8FF4; 所得 6 字节红外控制码为:0x8f 0x41 0x61 0x42 0x62 0xf4。

四、具体代码如下:

import java.util.ArrayList;
import java.util.List;

public class CRC {
   
    public static void main(String[] args) {
   
        String s = "<Aa12x16,Fg.5tx15/x2+\1/hgBb>";
        String order = getOrder(s);
        System.out.println(order);
    }

    public static String getOrder(String s){
   
//		得到前两位和最后两位英文字母
        String result_s = decode_S(s);
        String fin = result_s.subSequence(0, 2).toString().concat(result_s.subSequence(result_s.length()
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值