Avatar billede jcn Nybegynder
20. februar 2003 - 11:27 Der er 13 kommentarer og
1 løsning

Hvordan laver man en checksum?

Jeg skal lave en checksum udfra 8 bytes data. Hvordan gør jeg det?
Avatar billede soreno Praktikant
20. februar 2003 - 11:30 #1
Hvormeget må checksummen fylde ?
Avatar billede jcn Nybegynder
20. februar 2003 - 11:31 #2
1 byte
Avatar billede segmose Nybegynder
20. februar 2003 - 11:38 #3
char
  c = 0;
for (int i = 0; i < 8; i++)
  c = c ^ data[i];
Avatar billede soreno Praktikant
20. februar 2003 - 12:09 #4
Avatar billede arne_v Ekspert
20. februar 2003 - 12:13 #5
Skal det bare være en checksum - eller skal det være
en speciel checksum ?
Avatar billede arne_v Ekspert
20. februar 2003 - 12:16 #6
Avatar billede arne_v Ekspert
20. februar 2003 - 12:17 #7
Hvis det skal være en speciel checksum, så skal vi vide
hvilken.

Hvis det bare skal være en checksum, så er segmose's OK.
Jeg ville dog helt klart vælge en anden initial værdi en
nul.
Avatar billede segmose Nybegynder
20. februar 2003 - 12:19 #8
Jeg mener dunkelt at kunne huske at ovenstående XOR
checksum er teoretisk mere sikker end:

unsigned char
  data[8]
unsigned int
  c = 0;
for (int i = 0; i < 8; i++)
  c = c + data[i];

c = c & 255;
Avatar billede segmose Nybegynder
20. februar 2003 - 12:24 #9
Arne: Jeg ville dog helt klart vælge en anden initial værdi en
nul.

hvorfor det? hvis en transmission fejl bevirker at
der kun kommer 0, er det jo ligegyldigt om du starter
med 0 eller 255.
Avatar billede arne_v Ekspert
20. februar 2003 - 12:32 #10
segmose>

Medmindre jeg har misforstået noget så vil en protokol
med 8 byte data og 1 byte checksum, din checksum algoritme
og startsum 0 give 9 nul bytes. Mens det med en anden
startsum vil give 1 byte forskellig fra nul og 8 nul bytes.
Jeg finder det uheldigt at 9 nul bytes vil blive betraget
som valid.
Avatar billede jcn Nybegynder
20. februar 2003 - 12:34 #11
Jeg har fundet en løsning udfra arne's link
Avatar billede tam Nybegynder
20. februar 2003 - 12:37 #12
Det bedste er altid at bruge en eller anden standard.
Her: http://www.codeproject.com/cpp/crc32_large.asp er en god implementering af CRC32.
Avatar billede segmose Nybegynder
20. februar 2003 - 12:37 #13
Arne du har fuldstændig ret, jeg havde en kort hjerneblødning der!
Avatar billede arne_v Ekspert
20. februar 2003 - 12:54 #14
Hvis linket hjalp dig så vil jeg tillade mig at ligge et svar.
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