#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*static*/unsigned long crc32_computebuf (unsigned long inCrc32, const void *BUF,
int buflen);
size_t Buflen);
int main (void)
{
unsigned long crc32 = 0;
//------------------------
Two sets of tests were used, one to pass only one number 1, and the other to pass two number 3 9 to correspond to the CRC tool. At first it was wrong because BUF defined not char. I don't understand why it has to be char.
Char buf[2];
buf[0]=3;
BUF[1] = 9;
CRC32 = Crc32_computebuf (CRC32, buf, 2);
---------End---------------
Char buf[1];
Buf[0]=1;
CRC32 = Crc32_computebuf (CRC32, buf, 1);
printf ("\nhello\n");
printf ("\ncrc32=%x", CRC32);
return 0;
}
/*static*/unsigned long crc32_computebuf (unsigned long inCrc32, const void *BUF,
int Buflen)
size_t Buflen)
{
static const unsigned long crctable[256] = {
0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,0x706af48f,0xe963a535,
0X9E6495A3,0X0EDB8832,0X79DCB8A4,0XE0D5E91E,0X97D2D988,0X09B64C2B,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,0X01DB7106,0X98D220BC,0XEFD5102A,0X71B18589,0X06B6B51F,
0X9FBFE4A5,0XE8B8D433,0X7807C9A2,0X0F00F934,0X9609A88E,0XE10E9818,0X7F6A0DBB,
0X086D3D2D,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,0x03b6e20c,0x74b1d29a,0xead54739,
0x9dd277af,0x04db2615,0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,
0xe40ecf0b,0x9309ff9d,0x0a00ae27,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,0X026D930A,
0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,0x95bf4a82,0xe2b87a14,0x7bb12bae,
0x0cb61b38,0x92d28e9b,0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,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 CRC32;
unsigned char *bytebuf;
size_t i;
CRC32 = inCrc32 ^ 0xFFFFFFFF;
Bytebuf = (unsigned char*) buf;
for (i=0; i < Buflen; i++) {
CRC32 = (Crc32 >> 8) ^ crctable[(crc32 ^ bytebuf[i]) & 0xFF];
}
Return (crc32 ^ 0xFFFF);
return (CRC32);
}
CRC32 checksum C implementation