• C

# Checksum function

I am trying to calculate the checksum (which is to obtain the sum of all bytes then obtain the 1's complement) - then store this as 1 byte to a file.  I am running on a Linux platform.

I received some feedback from the experts and was given this calculation -
unsigned char Data[12];
int i;

unsigned int CRC ()
{
unsigned int sum;

sum = 0;
for (i=0; i < 12; ++i)
sum += Data[i];

sum ^= sum;
return (sum);
}

However, i had some issues with it - it was populating some bizarre # -

When I use this approach  - I believe it works.

#define       POLYNOMIAL      0x04C11DB7
#define       WIDTH    (8 * sizeof(unsigned char))
#define       TOPBIT   (1 << (WIDTH - 1))

for (int byte = 0; byte < dataSize; ++byte)  {
remainder ^= (data[byte] << (WIDTH - 8));
for (unsigned char bit = 8; bit > 0; --bit) {
if (remainder & TOPBIT)
remainder = (remainder << 1) ^ POLYNOMIAL;
else
remainder = (remainder << 1);
}
}
}
return remainder;

I would like to  understand what the differences are between the 2 implementations.
###### Who is Participating?

Data Warehouse Architect / DBACommented:
Hi jewee,

They are quite different algorithms.  The first solution (which I provided) asked the question that you answered.  i.e. sum the bytes and take the 1's complement.

The equation that you've provided solves the checksum issue in quite a bit different fashion than what you'd originally asked.

Good Luck!
Kent
0

Author Commented:
I was going to post this question int he previous one but I already closed it out.

I was just curious - What are the differences in calculation???  do they both generate pretty much the same thing - just different implementation?
0

Commented:
As KDO said they are very different algorithms. The latter one is called CRC which is stronger then the first one.

http://en.wikipedia.org/wiki/Checksum
http://en.wikipedia.org/wiki/Cyclic_redundancy_check

regards
Manish Regmi
0

Data Warehouse Architect / DBACommented:
Hi jewee,

> I was going to post this question int he previous one but I already
> closed it out.

This is a legitimate follow up to the original post.  Don't be bashful about asking for clarification after closing a question.  Most of use that respond in a thread will revisit it after another post.

Kent
0

Author Commented:
Thank you Kent.  I wasn't aware of the fact that I could do that after it was closed.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.