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.