Autor Beitrag
crystal
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 16.02.12 12:07 
Hallo C# Forum!

Ich bin neu hier, bitte korrigiert mich, falls ich was falsch mache ;)


Ich habe ein Problem, dass sich leider ganz einfach nicht lösen lässt und hoffe auf eure Hilfe: Über das Netzwerk bekomme ich ein Byte[] in mein Programm von außen geschickt. Dieses Byte[] enthält Elemente einer Struktur, die ich nun zusammenbauen soll.

Das Programm kennt die Struktur nicht - diese ist immer unterschiedlich zusammengebaut. Ich bekomme jedoch eine Textdatei, die ich parsen kann, um an die einzelne Elemente der Struktur heran zu kommen.

z.B.:
ausblenden C#-Quelltext
1:
public struct myStruct { public bool active; public string caption; public Int16 value1; public Int16 value2;}					


Vorhaben zusammengefasst: Textdatei parsen -> Struktur dynamisch erstellen -> Byte[] zerlegen und Werte den Strukturelementen zuweisen.

Das ganze lässt sich ganz bestimmt mit CodeDOM umsetzen, doch vielleicht gibt es einen schnelleren Weg?

Danke für eure Vorschläge!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt

Crosspost: Klassen / Strukturen dynamisch erstellen


Zuletzt bearbeitet von crystal am Do 16.02.12 14:05, insgesamt 2-mal bearbeitet
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 16.02.12 13:40 
:welcome: in der EE!

Der Plan hört sich schon einmal nicht schlecht an, los geht's ;) ! Eine Information fehlt aber noch: wie/womit wurde die Struktur überhaupt als Byte-Array serialisiert? Da gibt es schon so einige Möglichkeiten.

_________________
>λ=
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 16.02.12 13:47 
Hallo crystal,

bitte Crossposts entsprechend unserer Richtlinien (4.8) angeben: myCSharp.de - Strukturen dynamisch zur Laufzeit erzeugen

Edit: seit heute gibt es einen eigenen Punkt dafür unter "3.10 Crosspostings"


Zuletzt bearbeitet von Th69 am Fr 17.02.12 16:25, insgesamt 1-mal bearbeitet
crystal Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 16.02.12 14:26 
Vielen Dank für die Antworten und hilfreiche Hinweise!

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
bitte Crossposts entsprechend unserer Richtlinien (4.8) angeben
-> Korrigiert

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Eine Information fehlt aber noch: wie/womit wurde die Struktur überhaupt als Byte-Array serialisiert? Da gibt es schon so einige Möglichkeiten.

Herkunft des Byte Arrays ist eher irrelevant. Es liegt im BigEndian Format vor und kann mit dem BitConverter (Gewusst wie: Konvertieren eines Bytearrays) konvertiert werden.

Spannend ist, ob es außer CodeDOM Möglichkeiten gibt so was zu realisieren...
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 16.02.12 14:35 
Zitat:
Herkunft des Byte Arrays ist eher irrelevant. Es liegt im BigEndian Format vor und kann mit dem BitConverter (Gewusst wie: Konvertieren eines Bytearrays) konvertiert werden.


Die strings ebenfalls?? Da gibt es ja reichlich Darstellungsvarianten und Encodings.

Dein Vorhaben klingt ein wenig nach Rad neu erfinden. Wenn deine Strukturbeschreibung in dieser Form noch nicht fixiert wird würde ich mich in der Wsdl Ecke mal umsehen. Da gibt es einige Lösungen dynamisch aus der Typbeschreibung ProxyKlassen/Assemblies zu erzeugen. Nur weil es Wsdl heißt muß da ja nicht zwingend ein echter Webservice dahinter hängen. Wenn man sich dann noch nach Soap richtet ist auch ein eventuell vorhandenes Formatproblem des Bytestreams gelöst.
crystal Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 16.02.12 15:28 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Herkunft des Byte Arrays ist eher irrelevant. Es liegt im BigEndian Format vor und kann mit dem BitConverter (Gewusst wie: Konvertieren eines Bytearrays) konvertiert werden.


Die strings ebenfalls?? Da gibt es ja reichlich Darstellungsvarianten und Encodings.

Dein Vorhaben klingt ein wenig nach Rad neu erfinden. Wenn deine Strukturbeschreibung in dieser Form noch nicht fixiert wird würde ich mich in der Wsdl Ecke mal umsehen. Da gibt es einige Lösungen dynamisch aus der Typbeschreibung ProxyKlassen/Assemblies zu erzeugen. Nur weil es Wsdl heißt muß da ja nicht zwingend ein echter Webservice dahinter hängen. Wenn man sich dann noch nach Soap richtet ist auch ein eventuell vorhandenes Formatproblem des Bytestreams gelöst.


Ralf, danke für den Hinweis.

Ich muss wahrscheinlich die Frage ein bisschen verdeutlichen:

Ich weiss, dass im Byte Array nur 8-Bit ASCII Zeichen auftauchen können: 1 Byte = 1 Zeichen. Deswegen ist BitConverter für mich mehr als genug.

Textdatei parsen und Byte Array zerlegen stellt kein Problem dar.

Interessant ist, wie man eine Struktur / Klasse zur Laufzeit anlegen kann, oder sollte ich ganz anders vorgehen? (was ich inzwischen glaube)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 16.02.12 17:30 
Wie im anderen Forum schon geschrieben wurde: Das hängt ganz davon ab, was du mit dem Struct danach vor hast. Ein Dictionary wäre sicher die einfachste Lösung.

_________________
>λ=
crystal Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 16.02.12 18:11 
GELÖST: Ein Dictionary ist tatsächlich die einfachte Lösing! Manchmal denkt man zu kompliziert :)