带有X ^ 8 + X2 + X + 1的CRC8工作Java源代码 [英] CRC8 with X^8 + X2 + X + 1 Working java source code

查看:94
本文介绍了带有X ^ 8 + X2 + X + 1的CRC8工作Java源代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要一个有效的Java源代码来计算字节数组的CRC8字节。

I want a working Java source code for calculation of CRC8 byte for Array of bytes.

我测试了很多,但是由于索引为CRC8 TABLE越界超出此错误。

I tested many, but all of them stop in middle because the index of CRC8 TABLE went Out Of Bounds with this error.


线程 main中的异常java.lang.ArrayIndexOutOfBoundsException:255
在com.exelonix.model.CRC.crc_update( CRC.java:45)com.exelonix.model.CRC.main(CRC.java:36

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 255 at com.exelonix.model.CRC.crc_update(CRC.java:45) at com.exelonix.model.CRC.main(CRC.java:36



public class CRC {
    public final static int CRC_POLYNOM = 0x9c;

    public final static int CRC_PRESET = 0xFF;

    // CRC-8, poly = x^8 + x^2 + x^1 + x^0, init = 0
    private static final byte[] CRC8_TABLE =
        new byte[] {(byte) 0x00,(byte) 0x07,(byte) 0x0E,(byte) 0x09,(byte) 0x1C,(byte) 0x1B,(byte) 0x12,(byte) 0x15,(byte) 0x38,(byte) 0x3F,(byte) 0x36,(byte) 0x31,
                    (byte) 0x24,(byte) 0x23,(byte) 0x2A,(byte) 0x2D,(byte) 0x70,(byte) 0x77,(byte) 0x7E,(byte) 0x79,(byte) 0x6C,(byte) 0x6B,(byte) 0x62,(byte) 0x65,
                    (byte) 0x48,(byte) 0x4F,(byte) 0x46,(byte) 0x41,(byte) 0x54,(byte) 0x53,(byte) 0x5A,(byte) 0x5D,(byte) 0xE0,(byte) 0xE7,(byte) 0xEE,(byte) 0xE9,
                    (byte) 0xFC,(byte) 0xFB,(byte) 0xF2,(byte) 0xF5,(byte) 0xD8,(byte) 0xDF,(byte) 0xD6,(byte) 0xC4,(byte) 0xC3,(byte) 0xCA,(byte) 0xCD,(byte) 0x90,
                    (byte) 0x97,(byte) 0x9E,(byte) 0x99,(byte) 0x8C,(byte) 0x8B,(byte) 0x82,(byte) 0x85,(byte) 0xA8,(byte) 0xAF,(byte) 0xA6,(byte) 0xA1,(byte) 0xB4,
                    (byte) 0xB3,(byte) 0xBA,(byte) 0xBD,(byte) 0xC7,(byte) 0xC0,(byte) 0xC9,(byte) 0xCE,(byte) 0xDB,(byte) 0xDC,(byte) 0xD5,(byte) 0xD2,(byte) 0xFF,
                    (byte) 0xF8,(byte) 0xF1,(byte) 0xF6,(byte) 0xE3,(byte) 0xE4,(byte) 0xED,(byte) 0xEA,(byte) 0xB7,(byte) 0xB0,(byte) 0xB9,(byte) 0xBE,(byte) 0xAB,
                    (byte) 0xAC,(byte) 0xA5,(byte) 0xA2,(byte) 0x8F,(byte) 0x88,(byte) 0x81,(byte) 0x86,(byte) 0x94,(byte) 0x9D,(byte) 0x9A,(byte) 0x27,(byte) 0x20,
                    (byte) 0x29,(byte) 0x2E,(byte) 0x3C,(byte) 0x35,(byte) 0x32,(byte) 0x1F,(byte) 0x18,(byte) 0x11,(byte) 0x16,(byte) 0x03,(byte) 0x04,(byte) 0x0D,
                    (byte) 0x0A,(byte) 0x57,(byte) 0x50,(byte) 0x59,(byte) 0x5E,(byte) 0x4B,(byte) 0x4C,(byte) 0x45,(byte) 0x42,(byte) 0x6F,(byte) 0x68,(byte) 0x61,
                    (byte) 0x66,(byte) 0x73,(byte) 0x74,(byte) 0x7D,(byte) 0x7A,(byte) 0x89,(byte) 0x8E,(byte) 0x87,(byte) 0x80,(byte) 0x95,(byte) 0x92,(byte) 0x9B,
                    (byte) 0x9C,(byte) 0xB1,(byte) 0xB6,(byte) 0xBF,(byte) 0xB8,(byte) 0xAD,(byte) 0xAA,(byte) 0xA3,(byte) 0xA4,(byte) 0xF9,(byte) 0xFE,(byte) 0xF7,
                    (byte) 0xF0,(byte) 0xE5,(byte) 0xE2,(byte) 0xEB,(byte) 0xEC,(byte) 0xC1,(byte) 0xC6,(byte) 0xCF,(byte) 0xC8,(byte) 0xDD,(byte) 0xDA,(byte) 0xD3,
                    (byte) 0xD4,(byte) 0x69,(byte) 0x6E,(byte) 0x67,(byte) 0x60,(byte) 0x75,(byte) 0x72,(byte) 0x7B,(byte) 0x7C,(byte) 0x51,(byte) 0x56,(byte) 0x5F,
                    (byte) 0x58,(byte) 0x4D,(byte) 0x4A,(byte) 0x43,(byte) 0x44,(byte) 0x19,(byte) 0x1E,(byte) 0x17,(byte) 0x10,(byte) 0x05,(byte) 0x02,(byte) 0x0B,
                    (byte) 0x0C,(byte) 0x21,(byte) 0x26,(byte) 0x2F,(byte) 0x28,(byte) 0x3D,(byte) 0x3A,(byte) 0x33,(byte) 0x34,(byte) 0x4E,(byte) 0x49,(byte) 0x40,
                    (byte) 0x47,(byte) 0x52,(byte) 0x55,(byte) 0x5C,(byte) 0x5B,(byte) 0x76,(byte) 0x71,(byte) 0x78,(byte) 0x7F,(byte) 0x6A,(byte) 0x6D,(byte) 0x64,
                    (byte) 0x63,(byte) 0x3E,(byte) 0x39,(byte) 0x30,(byte) 0x37,(byte) 0x22,(byte) 0x25,(byte) 0x2C,(byte) 0x2B,(byte) 0x06,(byte) 0x01,(byte) 0x08,
                    (byte) 0x0F,(byte) 0x1A,(byte) 0x1D,(byte) 0x14,(byte) 0x13,(byte) 0xAE,(byte) 0xA9,(byte) 0xA0,(byte) 0xA7,(byte) 0xB2,(byte) 0xB5,(byte) 0xBC,
                    (byte) 0xBB,(byte) 0x96,(byte) 0x91,(byte) 0x98,(byte) 0x9F,(byte) 0x8A,(byte) 0x8D,(byte) 0x84,(byte) 0x83,(byte) 0xDE,(byte) 0xD9,(byte) 0xD0,
                    (byte) 0xD7,(byte) 0xC2,(byte) 0xC5,(byte) 0xCC,(byte) 0xCB,(byte) 0xE6,(byte) 0xE1,(byte) 0xE8,(byte) 0xEF,(byte) 0xFA,(byte) 0xFD,(byte) 0xF4,
                    (byte) 0xF3 };


    public static void main(String[] args) {
        byte[] b = new byte[] {1, 56, -23, 3, 0, 19, 0, 0, 2, 0, 3, 13, 8, -34, 7, 9, 42, 18, 26, -5, 54, 11, -94, -46, -128, 4, 48, 52, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 1, -32, -80, 0, 98, -5, 71, 0, 64, 0, 0, 0, 0, -116, 1, 104, 2};
        System.out.println(crc_update((byte) 0x00,b));
    }

    static long crc_update(byte crc, byte[] data){
        int data_len= data.length;
        int data_idx=0;
        while (data_len != 0){
            int tbl_idx = ((crc >> 0) ^ data[data_idx]) & 0xff ;
            System.out.println(tbl_idx +"+"+data[data_idx]);
            crc = (byte) ((CRC8_TABLE[tbl_idx] ^ (crc << 8)) & 0xff) ;
            data_idx+=1;
            data_len-=1;
        }
        return crc & 0xff;
    }

}


推荐答案

您的 CRC_TABLE 只有253个条目。应该有256个条目。您从哪里获得的?

Your CRC_TABLE has only 253 entries. It's supposed to have 256 entries. Where did you get it from?

这篇关于带有X ^ 8 + X2 + X + 1的CRC8工作Java源代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆