Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 587
  • Last Modified:

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.
0
jewee
Asked:
jewee
  • 2
  • 2
2 Solutions
 
Kent OlsenData 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
 
jeweeAuthor 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
 
manish_regmiCommented:
As KDO said they are very different algorithms. The latter one is called CRC which is stronger then the first one.

please read the links
http://en.wikipedia.org/wiki/Checksum
http://en.wikipedia.org/wiki/Cyclic_redundancy_check

regards
Manish Regmi
0
 
Kent OlsenData 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
 
jeweeAuthor Commented:
Thank you Kent.  I wasn't aware of the fact that I could do that after it was closed.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now