www.mikrocontroller.net

Forum: Compiler & IDEs uint32_t auftrennen und wieder zusammenfügen


Autor: Zerhacker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abend!

Was ist den der effizienteste Weg eine uint32_t Variable in 4 uint8_t zu 
zerteilen, bzw. zusammenzufügen?

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
union?

Autor: Zerhacker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe zu mindestens gelesen, dass man unions in der Beziehung meiden 
sollte.

Autor: Kai S. (zigzeg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ü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à.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Bitschuften?

uint32_t grosse_variable = 0xABCD;
uint8_t  byte_array[4];

byte_array[0] = (uint8_t)  grosse_variable;
byte_array[1] = (uint8_t) (grosse_variable >>  8);
byte_array[3] = (uint8_t) (grosse_variable >> 16);
byte_array[4] = (uint8_t) (grosse_variable >> 24);

Autor: 2ter Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage kann man eigentlich nur beantworten, wenn man sich das 
Assembler-Listing anschaut. Man kann schließlich nicht wissen, was der 
Compiler macht.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm ja. Die Indizes sind natürlich falsch, es soll 0 1 2 3 gehen und 
nicht 0 1 3 4.

Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.