Abend! Was ist den der effizienteste Weg eine uint32_t Variable in 4 uint8_t zu zerteilen, bzw. zusammenzufügen?
Ich habe zu mindestens gelesen, dass man unions in der Beziehung meiden sollte.
Ich denke das häng vom verwendeten System/Prozessor ab. Also entweder shifts, oder im memory ablegen, z.B. mittels union. Im Zweifelsfall einfach ausprobieren !
Überleg dir, wie du eine Dezimalzahl in ihre Ziffern zerlegst bzw. wieder zusammensetzt. Dann nimm als nicht 10 als Basis des Zahlensystems, sondern 256. Violà.
Mit Bitschuften?
1 | uint32_t grosse_variable = 0xABCD; |
2 | uint8_t byte_array[4]; |
3 | |
4 | byte_array[0] = (uint8_t) grosse_variable; |
5 | byte_array[1] = (uint8_t) (grosse_variable >> 8); |
6 | byte_array[3] = (uint8_t) (grosse_variable >> 16); |
7 | byte_array[4] = (uint8_t) (grosse_variable >> 24); |
Die Frage kann man eigentlich nur beantworten, wenn man sich das Assembler-Listing anschaut. Man kann schließlich nicht wissen, was der Compiler macht.
Ähm ja. Die Indizes sind natürlich falsch, es soll 0 1 2 3 gehen und nicht 0 1 3 4.
>effizient
Effizient in Bezug worauf? Laufzeit? Speicherbedarf? Stromverbrauch?
Arbeitsplatzsicherung? ;)
Bitschuften ;) ist portabel und lesbar und ich vermute, dass der GCC das
wunderbar optimieren kann, wenn man ihm das sagt (-O). Ich mache es drum
immer so, wie Mark es beschrieben hat.
Wenn die endianness bekannt ist, die Wartbarkeit und Portabilität egal
sind: union.
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.