Forum: Compiler & IDEs Cast Chararray auf 32 bit Array


von Simon (Gast)


Lesenswert?

Hallo Community,

Ich möchte ein n-tes 32-Bit Element in einem Char Array haben.

return __REV(  ((uint32_t*)Cache.FAT_Tabelle)[Cluster % 128]);

Cache.FAT_Tabelle ist hier ein array of chars, die Modulodivision gibt 
quasi als Pointer auf 32 bit die Position des Elements wieder.


Leider bekomme ich bei dem Statement oben nur das n_te Charelement 
dereferenziert als 32bit.

Kann mir jemand auf die Sprünge helfen?

von Peter II (Gast)


Lesenswert?

return __REV(  Cache.FAT_Tabelle[4*(Cluster % 128]) );


reicht das nicht?

von Simon (Gast)


Lesenswert?

Peter II schrieb:
> return __REV(  Cache.FAT_Tabelle[4*(Cluster % 128]) );
>
> reicht das nicht?

Doch. :) So funktionierts auch. Aber ich bin neugierig was ich falsch 
mache. Irgendwas hab ich am Cast wohl nicht verstanden.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Evtl. gibt's nen Trap weil der Cast das Alignment des Zugriffs erhöht, 
was aber bei einem char* nicht sichergestellt ist?

Abhilfe:  -Werror=cast-align

von holger (Gast)


Lesenswert?

Vieleicht so?

return __REV(  (uint32_t*)&Cache.FAT_Tabelle[Cluster % 128]);

von holger (Gast)


Lesenswert?

>Vieleicht so?
>
>return __REV(  (uint32_t*)&Cache.FAT_Tabelle[Cluster % 128]);

Öh, nee;)

Oder so:

uint32_t *p = Cache.FAT_Tabelle;

return __REV(  *p[Cluster % 128]);

von holger (Gast)


Lesenswert?

>return __REV(  *p[Cluster % 128]);

Verdammt, das Sternchen muss weg

return __REV( p[Cluster % 128]);

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
Noch kein Account? Hier anmelden.