#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef unsigned uint;
uint crc32(const char* data,int size,uint crc=0) {
	crc=~crc;
	for(int i=0;i<size;i++) { 
		crc^=data[i]&255;
		for(int j=0;j<8;j++) crc=crc>>1^0xEDB88320&-(crc&1); 
	}
	return ~crc;
}

int main(int argc, char const *argv[]) {
	enum { n=10 };
	char payload[n+4];
	srandom(time(0)); for(int i=0;i<n;i++) payload[i]=random();
	
	uint payload_crc=crc32(payload,n);
	printf("crc(payload)=%08X\n",payload_crc);

	uint x=0x624D8C3; 
	char xd[4]={x,x>>8,x>>16,x>>24};
	uint xd_crc=crc32(xd,4);
	uint suffix=payload_crc^x;
	payload[n  ]=suffix;
	payload[n+1]=suffix>>8;
	payload[n+2]=suffix>>16;
	payload[n+3]=suffix>>24;
	uint crc=crc32(payload,n+4);
	printf("crc(data   )=%08X\n",crc);
	printf("crc(x      )=%08X\n",xd_crc);

	return 0;
}