Struct of Byte in ein Array of Byte

Begonnen von Frischling, 18. Mai 2010, 09:49:12

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Frischling

Hallo habe ein Problem für euch sicherlich leicht zu lösen!

jedoch ich brauch Hilfe dabei !!!!

habe eine Struktur in der nur Byte werte enthalten sind diese möchte ich gern in ein Array of Byte gleicher größe bringen und ausgeben. Dann soll das Array bearbeitet werden und danach wieder das Array of Byte in die Struktur geschrieben werden.

Ich könnte sozusagen zwei Wandlerfunktionen brauchen die Struct_to_Array und Array_to_Struct!

Könnte mir jemand einen solchen Code zuverfügungstellen?
oder bei der Lösung helfen

hugo

da musst du schon etwas genauer werden, wie sieht den dein struct aus?

generell sprichst du werte in einer struct wie folgt an:

struktur.wert1 := arrayx[0];
arrayx[0] := struktur.wert1;

Frischling

Hallo Hugo,
Danke!!!
aber das ist die Version Zeile für zeile! soviel schreiben wollte ich vermeiden

kann man es nicht so machen das es fortlaufend bis struktur bzw. Array ende erreicht wird.

vieleicht kann man es sogar Parametrierbar machen in dem man die Grösse (Zeilenlänge) ändern kann oder besteht aus Bool oder Real oder sonstigen werten

Meine Struktur ist 128 Byte lang und besteht nur aus Byte's soll in ein Array aus 128Byte's soll einfach wie ein Copy programm laufen

Ich hoffe du kannst Mir weiter helfen.

Frischling

Sorry die Struktur besteht aus unterschiedlichen Bezeichnern also etwa so: (ein Auszug)

(*Byte 15*)   FR_15               : BYTE;   (*Frei*)
(*Byte 16*)   TROG_NR11            : BYTE;   (*Trognummer 1 Teil 1*)
(*Byte 17*)   TROG_NR12            : BYTE;   (*Trognummer 1 Teil 2*)
(*Byte 18*)   TROG_NR21            : BYTE;   (*Trognummer 2 Teil 1*)
(*Byte 19*)   TROG_NR22            : BYTE;   (*Trognummer 2 Teil 2*)
(*Byte 20*)   TROG_NR31            : BYTE;   (*Trognummer 3 Teil 1*)
(*Byte 21*)   TROG_NR32            : BYTE;   (*Trognummer 3 Teil 2*)
(*Byte 22*)   TROG_NR41            : BYTE;   (*Trognummer 4 Teil 1*)
(*Byte 23*)   TROG_NR42            : BYTE;   (*Trognummer 4 Teil 2*)
(*Byte 24*)   FR_24               : BYTE;   (*Frei*)
(*Byte 25*)   FR_25               : BYTE;   (*Frei*)
(*Byte 26*)   FR_26               : BYTE;   (*Frei*)
(*Byte 27*)   FR_27               : BYTE;   (*Frei*)
(*Byte 28*)   FR_28               : BYTE;   (*Frei*)
(*Byte 29*)   FR_29               : BYTE;   (*Frei*)
(*Byte 30*)   BET_T_Day            : BYTE;   (*Betonierzeit Tag*)
(*Byte 31*)   BET_T_Month         : BYTE;   (*Betonierzeit Monat*)
(*Byte 32*)   BET_T_Year             : BYTE;   (*Betonierzeit Jahr *)
(*Byte 33*)   BET_T_Hour            : BYTE;   (*Betonierzeit Stunde*)
(*Byte 34*)   BET_T_Minute         : BYTE;   (*Betonierzeit Minute*)

peewit

#4
hallo

wenn wir davon ausgehen das die strukur und das array gleich viele bytes haben (so sollte es sein !)
dann kannst du mit einen enifachen datenkopieren mittels pointer das durchführen

hier ein kleinen entwurf (nicht getestet, habe das nur so herunter getippselt !)

-----------------------------------------------------
FUNCTION data_copy : BOOL
VAR_INPUT
   Source : DWORD;
   Destination : DWORD;
   Count : UINT;
END_VAR
VAR
   pSource,pDestination : POINTER TO BYTE ;
   x : UINT ;
END_VAR

pSource := Source ;
pDestination := Destination ;
FOR x := 1 TO Count DO
   pDestination^ := pSource^ ;
   pSource := pSource + 1 ;
   pDestination := pDestination + 1 ;
END_FOR
data_copy := TRUE;

----------------------------------------------------

das ganze rufst du dann folgend auf

data_copy(ADR(Source), ADR(Destination), SIZEOF(Source));

wobei source und destination jeweils dein array und struktur bzw umgekehrt sind


viel spass, damit


Frischling

Danke Peewit...
werd es einmal für mich anpassen und ausprobieren! :)

Frischling

Danke peewit,
dein Code funktioniert einwandfrei :)

MfG Frischling