Forum: Mikrocontroller und Digitale Elektronik Checksumme berechnen in VB und in C


von Jonnyk (Gast)


Lesenswert?

Hallo Leute

Ich hofe ihr könnt mir helfen.

Folgendes Problem:

Habe in VB ein programm da wird die Checksumme berechnet, mit dieser 
zeile

CKS = CKS + (bytbuffer(i) And &HFF)

wenn ich das jetzt nach c umschreiben möchte mache ich folgendes

cks = cks+(data & 0xFF);


aber es funktioniert nicht, ich bekomme 2 verschiedene checksummen bei 
den gleichen daten.


Kann mir wer sagen wo der Fehler liegt oder einen tip geben wie man das 
anders machen könnte?

von Kai G. (runtimeterror)


Lesenswert?

Einzelne Zeilen zu posten finde ich für die Beschreibung eines 
Algorithmus absolut ungenügend. Ich vermute, da ist noch eine Schleife 
drum und die Datentypen und die Initialisierung der Daten sind ebenfalls 
wichtig.

Bitte nachreichen.

Ein AND mit 0xFF finde ich irgendwie sinnfrei, wenn es sich um 
8-Bit-Werte handeln sollte.

Sicher, dass du nicht
   CKS = (CKS + bytbuffer(i)) And &HFF
bzw.
   cks = (cks + data) & 0xFF;
haben willst?


Gruß

Kai

von Jörg B. (manos)


Lesenswert?

Das "And &HFF" interpretier ich so, dass von einer Zahl nur die unteren 
8 Bit genommen werden sollen was bei "bytbuffer(i)" eigentlich eher 
unsinnig klingt da es wahrscheinlich sowieso nur 8 Bit Werte sind.

Vielleicht mal die Definition von cks und data prüfen...

von Niels H. (monarch35)


Lesenswert?

Jonnyk wrote:

> CKS = CKS + (bytbuffer(i) And &HFF)
>
> wenn ich das jetzt nach c umschreiben möchte mache ich folgendes
>
> cks = cks+(data & 0xFF);
>
>
> aber es funktioniert nicht, ich bekomme 2 verschiedene checksummen bei
> den gleichen daten.

Kannst du vieleicht ausmachen, welcher Code das richtige Ergebnis 
liefert?
Wie sind die Datentypen in beiden Codes definiert?

Wenn "cks" und "data" als uint8_t definiert sind, so wie es vermutlich 
sein sollte, ist  die &-Operation unnötig.

> Kann mir wer sagen wo der Fehler liegt oder einen tip geben wie man das
> anders machen könnte?

Ich vermute, du handtierst auf irgendeiner Seite mit falschen 
(vorzeichen-behafteten) Datentypen. Basic ist für solcherlei Probleme 
berühmt-berüchtigt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.