PC端校驗STM32的CRC32方法
阿新 • • 發佈:2021-08-31
stm32的crc32與主流的crc32主要差異有
- 需要校驗的資訊位元組每四位倒序
- 結果值不與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); }
參考文章