Thema: Delphi CRC-16 berechnen

Einzelnen Beitrag anzeigen

brose

Registriert seit: 20. Mai 2007
14 Beiträge
 
#5

Re: CRC-16 berechnen (Übersetzung C => Delphi)

  Alt 1. Mär 2010, 10:21
Ja, danke, aber ich hab auch nix rausbekommen.

Vermutlich handelt es sich um "RFC 1071 Internet Checksum" (http://www.codes-sources.com/rfc/RFC...R-24/1071.aspx)

Dort gibts unter Abschnitt 4.3 ne Implementation in C:

Delphi-Quellcode:
4.1 "C"

   The following "C" code algorithm computes the checksum with an inner
   loop that sums 16-bits at a time in a 32-bit accumulator.

   in 6
       {
          /* Compute Internet Checksum for "count" bytes
            *        beginning at location "addr".
            */
      register long sum = 0;

        while( count > 1 )  {
          /*  This is the inner loop */
              sum += * (unsigned short) addr++;
              count -= 2;
       }


           /* Add left-over byte, if any */
       if( count > 0 )
               sum += * (unsigned char *) addr;

           /* Fold 32-bit sum to 16 bits */
       while (sum>>16)
           sum = (sum & 0xffff) + (sum >> 16);

       checksum = ~sum;
   }

Verstehe ich das richtig:

Ich nehme immer zwei Hex-Pärchen und negiere sie. Dann summiere ich sie auf, den Übertrag (5. und weitere Stellen von rechts) schneide ich ab und addiere ihn ebenfalls. Die Summe negiere ich erneut und das ist dann der CRC-Wert?

Besteht evtl. die Möglichkeit, dass mir jemand den C-Code oben "mal eben" von C nach Delphi übersetzt?

Grüße
Sebastian
  Mit Zitat antworten Zitat