计算给定十六进制字符串的CRC16-IBM校验和,并且输入输出不反转

计算给定十六进制字符串的CRC16-IBM校验和,只计算输入和输出不反转的

public class CRC16 {

    private static final int POLY = 0x8005;// CRC-16多项式
    private static final int WIDTH = 16;// CRC-16的位数
    private static final int INITIAL_VALUE = 0x0000;// CRC-16的位数
    private static final int XOROUT = 0x0000;// CRC-16的位数

    /**
     * 计算给定十六进制字符串的CRC校验和。
     *
     * @param hexString 需要计算CRC校验和的十六进制字符串。
     * @return CRC校验和的十六进制表示。
     */
    public static String calculateCRC(String hexString) {
        int crc = INITIAL_VALUE;// 将CRC值初始化为初始值
        int data;

        for (int i = 0; i < hexString.length(); i++) {
            data = Integer.parseInt(String.valueOf(hexString.charAt(i)), 16);// 将十六进制字符串的每个字符转换为整数
            crc ^= (data << (WIDTH - 4)); // 将数据与CRC值进行异或运算

            for (int j = 0; j < 4; j++) {
                if ((crc & (1 << (WIDTH - 1))) != 0) { // 将数据与CRC值进行异或运算
                    crc = (crc << 1) ^ POLY;// 如果是,使用多项式进行异或运算
                } else {
                    crc <<= 1;// 如果不是,将CRC值左移1位
                }
            }
        }

        crc ^= XOROUT;// 将最终的CRC值与XOROUT值进行异或运算
        String s = ByteUtils.decimalToBinary(crc & 0xFFFF, 16);// 将CRC值转换为指定位数的二进制字符串
        return ByteUtils.bin2hex(s); // 将CRC值转换为指定位数的二进制字符串
    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值