Indirekte Speicheradressierung über struct

Gast #1756836
Lesenswert?

Hallo allerseits,

ich hab folgende Struktur:

typedef struct xy {
   unsigned char alter;
   unsigned int crc;
   unsigned char name[30];
   unsigned char vorname[20];
} _xy;


Die Daten liegen alle in einem externen EEProm gespeichert und ich muss 
eine Suche implementieren.

Gibt es unter C eine Möglichkeit, den Speicherbereich, den ich ja über 
einen Pointer adressiere, irgendwie über die definierten Elemente im 
Struct abzubilden ?

Beispiel, wenn ich nur die ersten 3 Buchstaben von Name lesen möchte, 
würd
ich jetzt folgendes schreiben:

memcpy (dest_buffer, xmem_pointer+3, 3);

ich würde dort jedoch irgendwie diese notation nutzen wollen, damit ich 
später beim erweitern/verändern des structs nicht sämtliche stellen im 
code anfassen muss:

memcpy (dest_buffer, xmem_pointer + xy.name, 3)

Aber leider spuckt mit der gcc dort nur einen fehler aus. gibt es 
überhaupt eine notation, die mir das ermöglicht ?

Vielen Dank schonmal!
Gast #1756848
Lesenswert?

Bernd schrieb:
> typedef struct xy {
>    unsigned char alter;
>    unsigned int crc;
>    unsigned char name[30];
>    unsigned char vorname[20];
> } _xy;

dann kannste dir nen Pointer anlegen:

xy* pointxy = NULL;

dann zuweisen:

pointxy = &_xy;

über das Zugreifen:

pointxy->alter = 12;
pointxy->name = "dsad";

so greifste auf Elemente einer Struktur zu, wenn die Startadresse im 
Pointer steht.
Gast #1756867
Lesenswert?

Bernd schrieb:
> memcpy (dest_buffer, xmem_pointer+3, 3);

Problematisch ist da halt, dass dem Compiler freigestellt ist, wie er 
die Struct intern organisiert (kann man aber glaub ich irgendwie 
deaktivieren -nopacked?).

Wie wärs, den Datensatz als Char-Array aufzubauen, in dem die Angaben 
fest vorgegebene Positionen haben?
#1756875
Lesenswert?

Bernd schrieb:
> memcpy (dest_buffer, xmem_pointer+3, 3);
1
_xy *xmem_pointer;
2
.. (u.a. Zuweisung an xmem_pointer) ..
3
memcpy (dest_buffer, &xmem_pointer->name, 3);

Es ist übrigens keine gute Idee, eine Benutzerstruktur „_xy“ zu nennen. 
Solche Symbole (beginnend mit „_“) sind für Compiler- und 
Runtime-Library-Bauer reserviert.
Gast #1756903
Lesenswert?

ich nehme alles zurück. mit der idee von floh klappts.

typedef struct xy {
   unsigned char alter;
   unsigned int crc;
   unsigned char name[30];
   unsigned char vorname[20];
} _xy;


_xy *point;

point = xmem_pointer;

memcpy (dest_buffer, point->name, 3)

@Zimmerer: jo, ist klar. ist jetzt aber auch nur pseudo-code. 
genaugenommen müsste ich jetzt noch die typenkonvertierungen angeben, 
damit der compiler nicht meckert.

ich bin nur der meinung, dass ich irgendwann mal zu meinen "turbo 
pascal" zeiten das ganze unter pascal so machen konnte, wie ich es oben 
aufgeführt hab.

aber ist jetzt egal, vielen vielen dank nochmal an alle!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren