Über Index Subindex auf Daten einer Struct zugreifen
-
struct { struct { UI_32 AA; UI_32 AB; }SubIndex1; struct { UC AC; }SubIndex2; }Index1; struct { struct { UI_16 BA; UC BB; }SubIndex1; struct { UI_16 BC; }SubIndex2; }Index2; UI_32* DataTable[20] = {(UI_32*)(&Index1.SubIndex1.AA),(UI_32*)(&Index1.SubIndex2.AC)};Jemand eine Idee, wie ich über einen Index Subindex z.B. 1.1 oder 2.1 oder sogar
2.1.1 einfach über eine Tabelle auf die entsprechende struct zugreifen kann.Eine Tabelle vom Datentyp UI_32* lässt ja keinen Zugriff auf die Datentypen
UC, UI_16 zu.
-
Nicht? Also, bei mir klappt das bestens. Noch sinnvoller wäre allerdings ein void-Zeiger:
void* DataTable[20] = {static_cast<void*>(&Index1.SubIndex1.AA), ... };Zugreifen kannst Du dann so:
*(static_cast<UC*>(DataTable[2])) = 'C';Viele Grüße,
Christian
-
Hallo Christian,
das mit dem void* ist ok, habe dann aber immer noch beim Zugriff das Problem
das ich dann auf den richtigen DatenTypen Casten muss.Da ich allerdings nur Indizes bekomme z.B. 1.2 möchte ich beim schreiben/lesen
des Wertes über die Pointer Tabelle auf den Cast verzichten da ich ja sonst genau wissen muss welcher Datentyp dahintersteckt, dann kann ich genausogut mit
switch case die richtige struct direkt lesen/beschreiben. Das ist bei vielen structs doch sehr Aufwendig.Aber ich glaube das ganze ist so über eine Tabelle nicht realisierbar, oder?
-
Was willst Du denn auf diese Weise programmieren? Vielleicht fällt hier ja jemandem ein anderer Weg ein, das zu erreichen.
Und woher hast Du diese merkwürdigen Datentypen? Sind die selbst definiert?
-
Hallo,
Was ist Merkwürdig an den DatenTypen, UI_32 unsigned int, UI_16 unsigned short, UC unsigned char.
-
Ja, ich habe durchaus verstanden, wofür diese Kurzformen stehen. Allerdings habe ich sie in dieser Form noch nicht gesehen.
-
Na ja ist ein wenig in Eigeninitative enstanden, eigentlich sollte ich mich
an den Standard halten damit es kompatibel bleibt.Übrigens sehe ich gerade das in der Message auch der Datentyp mit übertragen
wird, dann weiss ich ja auch auf was ich casten muss