CRC32之JAVA实现

来源:互联网 发布:dedecms中js如何使用 编辑:程序博客网 时间:2024/05/18 09:35

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 0