Mathias H. schrieb:
> Ich habe eine struct:
>
1 | > typedef struct
|
2 | > {
|
3 | > unsigned long ltime;
|
4 | > unsigned char type;
|
5 | > unsigned char z[2];
|
6 | > }
|
7 | > array_t;
|
8 | >
|
9 | > array_t a[48],buffer;
|
10 | >
|
> in der Mainfunktion muss ich dieses struct nun in ein char array
> umwandeln um es per Funk zu übertragen. Das mach ich mit folgendem code:
>
1 | > unsigned char *b;
|
2 | > b=(unsigned char *)&a[1];
|
3 | >
|
> (und das b-array wird dann übertragen)
Du meinst &a[0]
b = (unsigned char*)a;
hätte es auch getan.
> Das funktioniert auch soweit ganz gut.
gut.
> Jetzt fehlt mir aber auf der Empfängerseit die Umwandlung des
> empfangenen array zurück in das struct.
> sicherlich könnte ich die byte
> einzeln zuweisen, aber ich hab da eher an soetwas wie
>
1 | > buffer=(array_t*)&b;
|
2 | >
|
> gedacht, was aber nicht funktioniert.
Wie immer, wie sind die Datentypen der beteiligten Variablen?
Welchen Typ hat 'buffer'?
Wenn das wie oben ein array_t ist, dann ist alles klar.
(Warum heist der Datentyp eigentlich array_t? Ein selten blöder Namen.
Nenn Datentypen die du selbst baust, genauso wie Variablen, nicht nach
dem Typ [hier Array], sondern nach dem was du da drinnen speicherst.
Eine Zusammenfassung von ltime, type und z repräsentiert etwas. Was
repräsentiert es? Ist das eine Stempelzeit, ist das der Zeitpunkt an dem
Alarm ausgelöst wurde, ist das der Zeitpunkt wie lange ein Buch
entliehen wurde ... je nachdem nennst du deinen Datentyp projektbezogen
mit einem entsprechenden Begriff. Aber nicht array_t. Das ist ein
nichtssagender Name und noch dazu falsch. Denn du hast eine struct und
kein Array. Die Tatscahe, dass du den Datentyp benutzt um damit ein
Array aufzubauen ist irrelevant.)
Du brauchst schon ein Pointervariable, damit du die Adresse von b so
umcasten kannst, dass dir dieser Pointer auf den Anfang von b zeigt,
aber der Speicherinhalt dort anders interpretiert wird.
1 | array_t* inputBuffer;
|
2 | inputBuffer = (array_t*)b;
|
3 |
|
4 | for( i = 0; i < 10; ++i )
|
5 | mach was mit inputBuffer[i].ltime
|