CRC32之JAVA实现

3 篇文章 0 订阅

CRC32之JAVA实现

近段时间项目中需要跟家用机顶盒进行对接,这里就难免需要涉及一些TS/SECTION之类的知识,关于TS及SECTION的协议这里不做讨论,今天的重点在于SECTION中的CRC32校验。
网上也找了很多关于CRC32的示例,C的JAVA的等等,但放到自己的程序里之后,对于发出的TS流,机顶盒总是过不了CRC32这一关,索性跟机顶盒要来C语言开发的CRC32实现代码,移植到了JAVA,贴到此处,以备查阅。

/**
 * <pre>
 * CRC32计算
 * </pre>
 *
 * @author  ManerFan 2015年8月4日
 */
public class CRC32 {
    /**
     * CRC32 = X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10
     *  + X8 + X7 + X5 + X4 + X2 + X1 + X0 
     */

    private static final int CN = 0x04C11DB7;

    private static int[] ptiTable = new int[256];

    static {
        build(CN);
    }

    private static void build(int cn) {
        int nData = 0;
        int nAccum = 0;

        for (int i = 0; i < 256; i++) {
            nData = i << 24;
            nAccum = 0;
            for (int j = 0; j < 8; j++) {
                if (0 != ((nData ^ nAccum) & 0x80000000)) {
                    nAccum = (nAccum << 1) ^ cn;
                } else {
                    nAccum <<= 1;
                }
                nData <<= 1;
            }
            ptiTable[i] = nAccum;
        }
    }

    public static int calculate(byte[] datas) {
        int crc32 = 0xFFFFFFFF;

        if (null == datas || datas.length < 1) {
            return crc32;
        }

        for (byte data : datas) {
            crc32 = (crc32 << 8) ^ ptiTable[(crc32 >>> 24) ^ (data & 0xFF)];
        }

        return crc32;
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值