#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
/******************************************************************************
https://blog.csdn.net/JanKin_BY/article/details/123717299
crc 测试
* Name: CRC-32/MPEG-2 x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
* Poly: 0x4C11DB7
* Init: 0xFFFFFFF
* Refin: False
* Refout: False
* Xorout: 0x0000000
* Note:
*****************************************************************************/
uint32_t crc32_mpeg_2(uint8_t *data, uint16_t length)
{
uint8_t i;
uint32_t crc = 0xffffffff; // Initial value
while(length--)
{
crc ^= (uint32_t)(*data++) << 24;// crc ^=(uint32_t)(*data)<<24; data++;
for (i = 0; i < 8; ++i)
{
if ( crc & 0x80000000 )
crc = (crc << 1) ^ 0x04C11DB7;
else
crc <<= 1;
}
}
return crc;
}
int main () {
uint8_t data;
uint8_t crc;
data = 0x34;
uint8_t update_buff_[4]={0x01,0x01,0x01,0x01};
crc = crc32_mpeg_2(&update_buff_, 4);
printf("data:%02x, crc:%02x\n", data, crc);
return 0;
}