编辑代码

#include <stdio.h>

/**
 *	@brief	将一个32位数据按位颠倒函数,如0011->1100
 *	@param	data:要颠倒的数据
 *	@retval	颠倒后的数据
 */

unsigned int Revbit(unsigned int data) //
{
	unsigned int uRevData = 0,i = 0;
	uRevData |= ((data >> i) & 0x01);
	for(i = 1; i < 32; i++)
	{
		uRevData <<= 1;
		uRevData |= ((data >> i) & 0x01);
	}
	return uRevData;
}

/**
 *	@brief	32位数据改变字节序
 *	@param	data:源数据
 *	@retval	改变后的数据
 */
unsigned int Revswap (unsigned int data) // 自己写的32字节序转换函数
{
	unsigned char *p = (unsigned char *)&data;
	unsigned char *q = p + 3;
	
	while(p < q)	
	{
		*p = *p^*q;
		*q = *p^*q;
		*p = *p^*q;
		p++;
		q--;
	}
	return data;
}

unsigned int CRC32_Cal(unsigned int data)
{
	unsigned int DR = Revbit(Revswap(data));
	return (Revbit(DR));  //Revbit(DR)^0xFFFFFFFF
}

int main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。

    printf("Hello world! %X",CRC32_Cal(1788446349));

    return 0;
}