CRC32C

#include<stdio.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");
    }
}?
/*结果如下:
BUFFER i's CRC32: 0xc29c07b9CRC32 
TABLE:
0x       0	0x77073096	0xee0e612c	0x990951ba	0x 76dc419
0x706af48f	0xe963a535	0x9e6495a3	0x edb8832	0x79dcb8a4
0xe0d5e91e	0x97d2d988	0x 9b64c2b	0x7eb17cbd	0xe7b82d07
0x90bf1d91	0x1db71064	0x6ab020f2	0xf3b97148	0x84be41de
0x1adad47d	0x6ddde4eb	0xf4d4b551	0x83d385c7	0x136c9856
0x646ba8c0	0xfd62f97a	0x8a65c9ec	0x14015c4f	0x63066cd9
0xfa0f3d63	0x8d080df5	0x3b6e20c8	0x4c69105e	0xd56041e4
0xa2677172	0x3c03e4d1	0x4b04d447	0xd20d85fd	0xa50ab56b
0x35b5a8fa	0x42b2986c	0xdbbbc9d6	0xacbcf940	0x32d86ce3
0x45df5c75	0xdcd60dcf	0xabd13d59	0x26d930ac	0x51de003a
0xc8d75180	0xbfd06116	0x21b4f4b5	0x56b3c423	0xcfba9599
0xb8bda50f	0x2802b89e	0x5f058808	0xc60cd9b2	0xb10be924
0x2f6f7c87	0x58684c11	0xc1611dab	0xb6662d3d	0x76dc4190
0x 1db7106	0x98d220bc	0xefd5102a	0x71b18589	0x 6b6b51f
0x9fbfe4a5	0xe8b8d433	0x7807c9a2	0x f00f934	0x9609a88e
0xe10e9818	0x7f6a0dbb	0x 86d3d2d	0x91646c97	0xe6635c01
0x6b6b51f4	0x1c6c6162	0x856530d8	0xf262004e	0x6c0695ed
0x1b01a57b	0x8208f4c1	0xf50fc457	0x65b0d9c6	0x12b7e950
0x8bbeb8ea	0xfcb9887c	0x62dd1ddf	0x15da2d49	0x8cd37cf3
0xfbd44c65	0x4db26158	0x3ab551ce	0xa3bc0074	0xd4bb30e2
0x4adfa541	0x3dd895d7	0xa4d1c46d	0xd3d6f4fb	0x4369e96a
0x346ed9fc	0xad678846	0xda60b8d0	0x44042d73	0x33031de5
0xaa0a4c5f	0xdd0d7cc9	0x5005713c	0x270241aa	0xbe0b1010
0xc90c2086	0x5768b525	0x206f85b3	0xb966d409	0xce61e49f
0x5edef90e	0x29d9c998	0xb0d09822	0xc7d7a8b4	0x59b33d17
0x2eb40d81	0xb7bd5c3b	0xc0ba6cad	0xedb88320	0x9abfb3b6
0x 3b6e20c	0x74b1d29a	0xead54739	0x9dd277af	0x 4db2615
0x73dc1683	0xe3630b12	0x94643b84	0x d6d6a3e	0x7a6a5aa8
0xe40ecf0b	0x9309ff9d	0x a00ae27	0x7d079eb1	0xf00f9344
0x8708a3d2	0x1e01f268	0x6906c2fe	0xf762575d	0x806567cb
0x196c3671	0x6e6b06e7	0xfed41b76	0x89d32be0	0x10da7a5a
0x67dd4acc	0xf9b9df6f	0x8ebeeff9	0x17b7be43	0x60b08ed5
0xd6d6a3e8	0xa1d1937e	0x38d8c2c4	0x4fdff252	0xd1bb67f1
0xa6bc5767	0x3fb506dd	0x48b2364b	0xd80d2bda	0xaf0a1b4c
0x36034af6	0x41047a60	0xdf60efc3	0xa867df55	0x316e8eef
0x4669be79	0xcb61b38c	0xbc66831a	0x256fd2a0	0x5268e236
0xcc0c7795	0xbb0b4703	0x220216b9	0x5505262f	0xc5ba3bbe
0xb2bd0b28	0x2bb45a92	0x5cb36a04	0xc2d7ffa7	0xb5d0cf31
0x2cd99e8b	0x5bdeae1d	0x9b64c2b0	0xec63f226	0x756aa39c
0x 26d930a	0x9c0906a9	0xeb0e363f	0x72076785	0x 5005713
0x95bf4a82	0xe2b87a14	0x7bb12bae	0x cb61b38	0x92d28e9b
0xe5d5be0d	0x7cdcefb7	0x bdbdf21	0x86d3d2d4	0xf1d4e242
0x68ddb3f8	0x1fda836e	0x81be16cd	0xf6b9265b	0x6fb077e1
0x18b74777	0x88085ae6	0xff0f6a70	0x66063bca	0x11010b5c
0x8f659eff	0xf862ae69	0x616bffd3	0x166ccf45	0xa00ae278
0xd70dd2ee	0x4e048354	0x3903b3c2	0xa7672661	0xd06016f7
0x4969474d	0x3e6e77db	0xaed16a4a	0xd9d65adc	0x40df0b66
0x37d83bf0	0xa9bcae53	0xdebb9ec5	0x47b2cf7f	0x30b5ffe9
0xbdbdf21c	0xcabac28a	0x53b39330	0x24b4a3a6	0xbad03605
0xcdd70693	0x54de5729	0x23d967bf	0xb3667a2e	0xc4614ab8
0x5d681b02	0x2a6f2b94	0xb40bbe37	0xc30c8ea1	0x5a05df1b
0x2d02ef8d
*/

查表法

unsigned long GetCRC32(unsigned char* buf, unsigned int len)
{
	unsigned long Crc32_Poly1EDC6F41_Table32_Reflect[256] =
	{
			0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB,
			0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24,
			0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384,
			0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B,
			0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35,
			0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA,
			0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A,
			0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595,
			0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957,
			0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198,
			0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38,
			0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7,
			0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789,
			0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46,
			0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6,
			0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829,
			0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93,
			0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C,
			0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC,
			0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033,
			0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D,
			0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982,
			0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622,
			0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED,
			0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F,
			0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0,
			0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540,
			0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F,
			0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1,
			0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E,
			0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E,
			0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351
	};

	unsigned long Crc32_Poly1EDC6F41_Table32[256] =
	{
			0x00000000, 0x1EDC6F41, 0x3DB8DE82, 0x2364B1C3, 0x7B71BD04, 0x65ADD245, 0x46C96386, 0x58150CC7,
			0xF6E37A08, 0xE83F1549, 0xCB5BA48A, 0xD587CBCB, 0x8D92C70C, 0x934EA84D, 0xB02A198E, 0xAEF676CF,
			0xF31A9B51, 0xEDC6F410, 0xCEA245D3, 0xD07E2A92, 0x886B2655, 0x96B74914, 0xB5D3F8D7, 0xAB0F9796,
			0x05F9E159, 0x1B258E18, 0x38413FDB, 0x269D509A, 0x7E885C5D, 0x6054331C, 0x433082DF, 0x5DECED9E,
			0xF8E959E3, 0xE63536A2, 0xC5518761, 0xDB8DE820, 0x8398E4E7, 0x9D448BA6, 0xBE203A65, 0xA0FC5524,
			0x0E0A23EB, 0x10D64CAA, 0x33B2FD69, 0x2D6E9228, 0x757B9EEF, 0x6BA7F1AE, 0x48C3406D, 0x561F2F2C,
			0x0BF3C2B2, 0x152FADF3, 0x364B1C30, 0x28977371, 0x70827FB6, 0x6E5E10F7, 0x4D3AA134, 0x53E6CE75,
			0xFD10B8BA, 0xE3CCD7FB, 0xC0A86638, 0xDE740979, 0x866105BE, 0x98BD6AFF, 0xBBD9DB3C, 0xA505B47D,
			0xEF0EDC87, 0xF1D2B3C6, 0xD2B60205, 0xCC6A6D44, 0x947F6183, 0x8AA30EC2, 0xA9C7BF01, 0xB71BD040,
			0x19EDA68F, 0x0731C9CE, 0x2455780D, 0x3A89174C, 0x629C1B8B, 0x7C4074CA, 0x5F24C509, 0x41F8AA48,
			0x1C1447D6, 0x02C82897, 0x21AC9954, 0x3F70F615, 0x6765FAD2, 0x79B99593, 0x5ADD2450, 0x44014B11,
			0xEAF73DDE, 0xF42B529F, 0xD74FE35C, 0xC9938C1D, 0x918680DA, 0x8F5AEF9B, 0xAC3E5E58, 0xB2E23119,
			0x17E78564, 0x093BEA25, 0x2A5F5BE6, 0x348334A7, 0x6C963860, 0x724A5721, 0x512EE6E2, 0x4FF289A3,
			0xE104FF6C, 0xFFD8902D, 0xDCBC21EE, 0xC2604EAF, 0x9A754268, 0x84A92D29, 0xA7CD9CEA, 0xB911F3AB,
			0xE4FD1E35, 0xFA217174, 0xD945C0B7, 0xC799AFF6, 0x9F8CA331, 0x8150CC70, 0xA2347DB3, 0xBCE812F2,
			0x121E643D, 0x0CC20B7C, 0x2FA6BABF, 0x317AD5FE, 0x696FD939, 0x77B3B678, 0x54D707BB, 0x4A0B68FA,
			0xC0C1D64F, 0xDE1DB90E, 0xFD7908CD, 0xE3A5678C, 0xBBB06B4B, 0xA56C040A, 0x8608B5C9, 0x98D4DA88,
			0x3622AC47, 0x28FEC306, 0x0B9A72C5, 0x15461D84, 0x4D531143, 0x538F7E02, 0x70EBCFC1, 0x6E37A080,
			0x33DB4D1E, 0x2D07225F, 0x0E63939C, 0x10BFFCDD, 0x48AAF01A, 0x56769F5B, 0x75122E98, 0x6BCE41D9,
			0xC5383716, 0xDBE45857, 0xF880E994, 0xE65C86D5, 0xBE498A12, 0xA095E553, 0x83F15490, 0x9D2D3BD1,
			0x38288FAC, 0x26F4E0ED, 0x0590512E, 0x1B4C3E6F, 0x435932A8, 0x5D855DE9, 0x7EE1EC2A, 0x603D836B,
			0xCECBF5A4, 0xD0179AE5, 0xF3732B26, 0xEDAF4467, 0xB5BA48A0, 0xAB6627E1, 0x88029622, 0x96DEF963,
			0xCB3214FD, 0xD5EE7BBC, 0xF68ACA7F, 0xE856A53E, 0xB043A9F9, 0xAE9FC6B8, 0x8DFB777B, 0x9327183A,
			0x3DD16EF5, 0x230D01B4, 0x0069B077, 0x1EB5DF36, 0x46A0D3F1, 0x587CBCB0, 0x7B180D73, 0x65C46232,
			0x2FCF0AC8, 0x31136589, 0x1277D44A, 0x0CABBB0B, 0x54BEB7CC, 0x4A62D88D, 0x6906694E, 0x77DA060F,
			0xD92C70C0, 0xC7F01F81, 0xE494AE42, 0xFA48C103, 0xA25DCDC4, 0xBC81A285, 0x9FE51346, 0x81397C07,
			0xDCD59199, 0xC209FED8, 0xE16D4F1B, 0xFFB1205A, 0xA7A42C9D, 0xB97843DC, 0x9A1CF21F, 0x84C09D5E,
			0x2A36EB91, 0x34EA84D0, 0x178E3513, 0x09525A52, 0x51475695, 0x4F9B39D4, 0x6CFF8817, 0x7223E756,
			0xD726532B, 0xC9FA3C6A, 0xEA9E8DA9, 0xF442E2E8, 0xAC57EE2F, 0xB28B816E, 0x91EF30AD, 0x8F335FEC,
			0x21C52923, 0x3F194662, 0x1C7DF7A1, 0x02A198E0, 0x5AB49427, 0x4468FB66, 0x670C4AA5, 0x79D025E4,
			0x243CC87A, 0x3AE0A73B, 0x198416F8, 0x075879B9, 0x5F4D757E, 0x41911A3F, 0x62F5ABFC, 0x7C29C4BD,
			0xD2DFB272, 0xCC03DD33, 0xEF676CF0, 0xF1BB03B1, 0xA9AE0F76, 0xB7726037, 0x9416D1F4, 0x8ACABEB5
	};

	//unsigned long CRC32_data = 0x00000000;
	//for (unsigned int i = 0; i != len; ++i)
	//{
	//	unsigned char t = (CRC32_data ^ buf[i]) & 0xFF;
	//	CRC32_data = ((CRC32_data >> 8) & 0xFFFFFF) ^ CRC32_table[t];
	//}
	//return ~CRC32_data;

	unsigned long CRC32_data = 0x00000000;
	for (unsigned int i = 0; i != len; ++i)
	{
		unsigned char b = buf[i];
		unsigned char index = (CRC32_data ^ b) & 0xFF;
		CRC32_data = ((CRC32_data >> 8) & 0xFFFFFF) ^ Crc32_Poly1EDC6F41_Table32_Reflect[index];
	}

	return CRC32_data;
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值