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?
return __REV( Cache.FAT_Tabelle[4*(Cluster % 128]) ); reicht das nicht?
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.
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
Vieleicht so? return __REV( (uint32_t*)&Cache.FAT_Tabelle[Cluster % 128]);
>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]);
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.