#include<stdio.h>
//#include <../km/wdm.h>
#include <intrin.h>
unsigned int CRC32_table[256] = { 0 };
void init_CRC32_table()
{
for (int i = 0; i != 256; i++)
{
unsigned int CRC = i;
for (int j = 0; j != 8; j++)
{
if (CRC & 1)
CRC = (CRC >> 1) ^ 0xEDB88320;
else
CRC >>= 1;
}
CRC32_table[i] = CRC;
}
}
unsigned int GetCRC32(unsigned char* buf, unsigned int len)
{
unsigned int CRC32_data = 0xFFFFFFFF;
for (unsigned int i = 0; i != len; ++i)
{
unsigned int t = (CRC32_data ^ buf[i]) & 0xFF;
CRC32_data = ((CRC32_data >> 8) & 0xFFFFFF) ^ CRC32_table[t];
}
return ~CRC32_data;
}
int main()
{
unsigned char i[8] = { 0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3 };
init_CRC32_table();
printf("BUFFER i's CRC32: 0x%x\n", GetCRC32(i, 8));
printf("CRC32 TABLE:\n");
for (int i = 0; i < 256; i++)
{
printf("0x%8x\t", CRC32_table[i]);
if ((i + 1) % 8 == 0)
printf("\n");
}
//__readfsdword(0x30);
__readgsqword(0x60);
}
CRC 校验相关
最新推荐文章于 2024-06-11 20:37:13 发布