PC端校验STM32的CRC32方法
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); }
参考文章

浙公网安备 33010602011771号