eine frage zum casting
-
Hallo,
ich wollte Fragen ob es irgendwie möglich ist ein Array in eine Instanz einer Struktur zu casten (das Array ist natürlich genauso groß wie die Struktur).z.B. bei:
struct eine_struktur { uint32_t _1; uint32_t _2; }; uint8_t arr[8];ist es möglich "arr" in "eine_struktur" umzuwandeln?
Vielen Dank im Voraus

-
eine_struktur s = *reinterpret_cast<eine_struktur*>(arr);
-
Ok, danke für die schnelle Antwort
,
es hat funktioniert. Das Thema kann nun geschlossen werden.
-
Eine Union könnte auch ne gute Idee sein, je nach Design.
-
314159265358979 schrieb:
eine_struktur s = *reinterpret_cast<eine_struktur*>(arr);Das ist undefiniertes Verhalten, falls die Struktur nicht 8 Bytes groß ist (zum Beispiel wegen Padding).
Ethon schrieb:
Eine Union könnte auch ne gute Idee sein, je nach Design.
Und das sowieso.
Also kurze Antwort: Nein. Du kannst aber mit
memcpydie beiden Member einzeln aus dem Array kopieren (und umgekehrt).
-
TyRoXx schrieb:
Also kurze Antwort: Nein. Du kannst aber mit
memcpydie beiden Member einzeln aus dem Array kopieren (und umgekehrt).Wobei memcpy() mit den selben Problemen zu kämpfen hat wie die alternativen Lösungen (reinterpret_cast und union).
-
Nö, mempcy ist ne saubere Sache. (Zumindest so sauber wie eben möglich)
Bei reinterpret_cast kann es Probleme mit unpasendem Alignment geben, bei memcpy nicht.
Und bei Unions steht im Standard dass man immer nur den Teil lesen darf der auch zuletzt geschrieben wurde, sonst ist es UB. Also auch nicht das wahre.
-
ok danke an alle für die tipps
ich schaue mir nachher die variante mit memcpy nochmal an