unsignedshort guess_this (unsignedshort *data, unsignedshort len) { long v; unsignedshort i; for (i=0; i<(len >> 1); i++) v += data [ i ]; if ((len & 1)==1) v += (data [ i ]<<8); return ~((v & 0xffff) + (v >> 16)); }
gesucht wird... 1. was macht die funktion (beschreibung möglichst in einem satz) ? 2. wofür wird die funktionm gebraucht ?
kleiner tip: heutzutage kommt kein rechner ohne sie aus -- one for all and all for oneDieser Post wurde am 10.07.2004 um 22:16 Uhr von 9ball editiert.
ui ein neues rätsel auf den ersten blick fällt mir auf v ist uninitialisiert soll das so sein oder ist das ein fehlerchen? -- ...fleißig wie zwei Weißbrote
hmm will mir spontan nicht einleuchten was das teil macht
startwert irgend ein uninitialisiertes v irgendwie summe i=0 bis len/2-1 data[ i ] + wenn len ungerade data[ i ]*256 ufs v packen am ende alle bits einmal invertieren.
Bearbeitung von Pablo:
Leerzeichen innerhalb von [ i ]
-- ...fleißig wie zwei WeißbroteDieser Post wurde am 10.07.2004 um 23:30 Uhr von Pablo editiert.
hatte ich schon vermutet hab aber trotzdem keine idee was das sein soll...
gib mal nen tipp wie data (sind das nur nullen und einsen) sinnvoll aussehen muss oder führt da alles zu nem "sinnvollen" ergebnis? -- ...fleißig wie zwei Weißbrote
gib mal nen tipp wie data (sind das nur nullen und einsen) sinnvoll aussehen muss oder führt da alles zu nem "sinnvollen" ergebnis?
die daten sind 16 bit worte mit beliebigem inhalt. allein heute hat dein computer (egal welches os du hast) die funktion schon zigtausendmal ausgeführt -- one for all and all for one
Ah, ich glaube, ich weiß es. Testet diese Funktion die korrekte Übertragung des IP-Headers (Checksum)?
ja, so ist es. die funktion berechnet die checksum, die von ip, tcp, udp usw. benutzt wird. sie berechnet 'das 16-bittige einerkomplement der summe aller einerkomplemente aller 16-bit wörter' -- one for all and all for one