Hallo, ich muß aus einer 4Byte großen Zahl die Cheksumme bilden in dem jedes Byte addiert wird. z.B. Dezimalzahl=560731841=21 6c 16 c1 ergibt Summe=356 gibt es da einen schlanken Lösungsweg in C zur Berechnung der Summe? Gruß Michael
Fuer nen uC wuerde ich int checksum = ((unsigned char*)&dez)[0] + ((unsigned char*)&dez)[1] + ((unsigned char*)&dez)[2] + ((unsigned char*)&dez)[3]; nehmen.
Naja, du hast deinen Ausgangswert in einem 4-byte integer gespeichert. Dein Ziel ist es, jedes dieser 4 bytes aufeinander zu addieren. Man nehme also die Adresse der 4 byte integer variable (&dez) und wandle den Pointer in einen Zeiger auf einen byte array um ((unsigned char*)&dez). Mit diesem Zeiger kann man jetzt schoen einfach jedes einzelne byte auslesen ((unsigned char*)&dez[index]). Man kann es auch so schreiben : unsigned char *byteArray = (unsigned char*) &dez; int checksum = byteArray[0] + byteArray[1] + byteArray[2] + byteArray[3];
Gerne doch. Dies ist zwar die dreckige Variante (pointer + casts) aber fuer den uC besser als teures Bit-Schieben. Wenn performance + Speicher kein Problem sind wuerde ich immer bits schieben.
1 | typedef union { |
2 | unsigned long long_val; |
3 | unsigned char byte_value[4]; |
4 | } converter_t; |
5 | |
6 | convertert_t cv; |
7 | unsigned int summe = 0; |
8 | |
9 | cv.long_val = mein_long_value; |
10 | summe = byte_value[0] + byte_value[1] + byte_value[2] + byte_value[3]; |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.