算法:Java CRC16冗余校验算法实现

CRC16冗余校验工具,工具类实现:

GetCheck为获取计算后的CRC校验值

package com.crlgc.basestation.utils;

import android.text.TextUtils;

/**
 * Created by  wsl
 * on 2019/3/17 14:21
 */
public class CRCTool {
    public static String GetCheck(String crcString) {
        int i, j = 0;
        int hi, lo, c1, c2;
        char[] ombuffer = HexString2Bytes(crcString);

        hi = 0xff;
        lo = 0xff;
        for (i = 0; i < ombuffer.length; i++) {
            lo = (char) (lo ^ ombuffer[i]);
            for (j = 0; j < 8; j++) {
                c1 = lo;
                c2 = hi;
                lo = (char) (lo >> 1);
                hi = (char) (hi >> 1);
                if ((c2 & 0x01) != 0) {
                    lo = (char) (lo | 0x80);
                }
                if ((c1 & 0x01) != 0) {
                    hi = (char) (hi ^ 0xa0);
                    lo = (char) (lo ^ 0x01);
                }
            }
        }
        return ByteFConverToString(new Integer[]{lo, hi});
    }

    public static char[] HexString2Bytes(String hexstr) {
        char[] tempChar = hexstr.toCharArray();
        char[] b = new char[tempChar.length / 2];
        int j = 0;
        for (int i = 0; i < b.length; i++) {
            char c0 = tempChar[j++];
            char c1 = tempChar[j++];
            b[i] = (char) ((parse(c0) << 4) | parse(c1));
        }
        return b;
    }

    public static int parse(char c) {
        if (c >= 'a')
            return (c - 'a' + 10) & 0x0f;
        if (c >= 'A')
            return (c - 'A' + 10) & 0x0f;
        return (c - '0') & 0x0f;
    }

    public static String ByteFConverToString(Integer[] bytes) {
        StringBuilder str = new StringBuilder();
        for (int b : bytes) {
            str.append(initHEX_2(Integer.toHexString(Integer.parseInt(String.valueOf(b)))));
        }
        return str.toString();
    }


    private static String initHEX_2(String hexString) {
        if (!TextUtils.isEmpty(hexString)) {
            int length = hexString.length();
            switch (length) {
                case 1:
                    hexString = "0" + hexString;
                    break;
                case 2:
                    break;
                default:
                    break;
            }
        } else {
            hexString = "00";
        }
        return hexString;
    }

    public static String frontCompWithZore(String sourceDate, int formatLength) {

        String newString = String.format("%0" + formatLength + "s", sourceDate);
        return newString;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值