PC端校验STM32的CRC32方法

stm32的crc32与主流的crc32主要差异有

  1. 需要校验的信息字节每四位倒序
  2. 结果值不与0xffffffff异或

第一步对需要校验的信息进行处理,每四位倒序

    public static void arrayRe(byte [] arr){

        for (int i = 0; i < arr.length;i+=4) {
            byte temp = 0;
            temp=arr[i];
            arr[i] = arr[i+3];
            arr[i+3] =temp;

            temp=arr[i+1];
            arr[i+1] = arr[i+2];
            arr[i+2] =temp;
        }
    }

第二步计算crc的校验值

    public static String CRC32_MPEG_2(byte[] source) {
        int wCRCin = 0xFFFFFFFF;
        int wCPoly = 0x04C11DB7;
        for (int i =0; i < source.length; i++) {
            for (int j = 0; j < 8; j++) {
                boolean bit = ((source[i] >> (7 - j) & 1) == 1);
                boolean c31 = ((wCRCin >> 31 & 1) == 1);
                wCRCin <<= 1;
                if (c31 ^ bit) {
                    wCRCin ^= wCPoly;
                }
            }
        }
        wCRCin &= 0xFFFFFFFF;
        return Integer.toHexString(wCRCin ^= 0x00000000);
    }

参考文章

PC端实现STM32硬件CRC32计算结果(基本原理)

posted @ 2021-08-31 10:59  南无象海豹  阅读(502)  评论(0)    收藏  举报