1. 程式人生 > 其它 >PC端校驗STM32的CRC32方法

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計算結果(基本原理)