Avatar billede kirugen Nybegynder
10. april 2003 - 18:39 Der er 5 kommentarer

Udregning af CRC-CCITT

Jeg har et datatelegram hvor der skal sendes en checksum med efter følgende opskrift:
"CRC Cyclic Redundance Check 16 bit CRC summe mit dem generatorpolynom X^16 + X^12 + X^5 + 1".
Efter hvad jeg har fundet ud af er det en standard der hedder CRC-CCITT og jeg har også fundet nogle VB programstumper og ocx'er men ingen af dem giver det rigtige resultat.
Jeg kender checksummen på følgende telegram:
[SOH] 66 49 122 236 [EOT]
Alle tal i decimal.
SOH = start af telegram = Dec 1
EOT = end af telegram = Dec 4
66 og 49 = ASCII "B" og "1"
122 og 236 = 16 bit checksum.
En VB programstump der kan regne det ud vil være velkommen, eller en forklaring på hvordan det regnes.
Avatar billede _darkstar_ Nybegynder
10. april 2003 - 23:32 #1
"summe mit dem generatorpolynom X^16 + X^12 + X^5 + 1" betyder at du skal tage addere alle bytes i beskeden efter at have hældt dem ind i polynomiet modulo 2^16.

Dvs. at summen for din besked er

66^16 + 66^12 + 66^5 + 1 + 49^16 + 49^12 + 49^5 + 1 + ... + 1 modulo 2^16.

Det er lidt omfattende at regne tal som 66^16 ud hvis man ikke bruger en særlig algoritme til at regne det ud. Heldigvis kan man jo dertil tage modulo 2^16 undervejs.

Hvis du er interesseret, kan jeg godt skrue et eksempel på en algoritme sammen til dig.
Avatar billede kirugen Nybegynder
11. april 2003 - 07:48 #2
Det vil være alle tiders.
Avatar billede kirugen Nybegynder
11. april 2003 - 07:56 #3
Jeg har også et telegram med et enkelt tegn:
Decimalværdien af tegnet er 6
Checksummen er 6 og 164 stadig decimal, jeg ved ikke om det er low eller high af den 16 bit checksum der kommer først.
Og jeg kan ikke få det til at passe med nogle af de færdige checksum udregnere der findes på nettet.
Avatar billede _darkstar_ Nybegynder
12. april 2003 - 01:53 #4
Så er jeg tilbage...

Jeg har lavet en lille algoritme som beregner checksummen sådan som jeg har forestillet mig at det skal gøres, men jeg får altså heller ikke samme værdier som du skriver ovenfor.

Din første besked er en anelse kryptisk beskrevet. Det som du skriver at man skal tage checksum af er serien 1, 66, 49, 122, 236, 4. Right?

Jeg har kigget lidt på forskellige sider rundt omkring og kan faktisk heller ikke få regnestykket til at gå op.

Her er de sider som jeg har kigget på:
http://www.repairfaq.org/filipg/LINK/F_crc_v34.html
http://tcllib.sourceforge.net/doc/crc16.html
http://www.boost.org/libs/crc/crc.html
Avatar billede kirugen Nybegynder
12. april 2003 - 11:43 #5
Alle telegrammer starter med [SOH] og slutter med [EOT]
Så i det første eksempel regner jeg med at det er 66 og 49 checksummen skal regnes af, hvilket når jeg lytter med på en kommunikation giver 122 og 236.
Man kan vel ikke regne værdierne for cheksummen med i cheksummen.
Jeg har som sagt også et andet telegram hvor der bare sendes værdien 6, hvor den medsendte checksum er 6 og 164.
Grunden til at det ikke passer kan måske være at man starter udregningen med et offset.
Hvis du kan vise mig hvordan man udregner checksummen på værdien 6 kan det være at jeg kan gætte/udregne et evt. offset.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester