Hallo, ich habe eine UDP Verbindung, über die verschiedene Datensätze von einem Microcontroller empfangen werden. Der ist in C programmiert und die Struktur sieht so aus (jetzt 4 Strukturen), dann Frage: //allgemeiner Header, gleich für alle Datensätze typedef struct headerCommon { UINT8 protocolVersion; UINT8 typeOfFrame; //1: key message 2:RcCmd 3:DataMsg } HEADER_COMMON; //Datensatz 1 typedef struct sKeyMsg { HEADER_COMMON info; UINT8 keyEvent; //0:up 1:down UINT8 keyCode; } KEY_MSG; //Datensatz 2 typedef struct sRcCmd { HEADER_COMMON info; UINT8 keyCode; } RC_MSG; //Datensatz 3 typedef struct sDataMsg { HEADER_COMMON info; UINT8 length; //data to follow according to length } DATA_MSG; Frage: ------ In C# bekomme ich ein Byte-Array vom UDP Socket. In C bzw. C++ würde ich den Byte-Stream zunächst auf HEADER_COMMON casten und an typeOfFrame sehen, welcher Datensatz (1, 2 oder 3) es tatsächlich ist. Dann könnte ich das Byte-Array auf die passende Struktur casten. Wie geht das in C#?
Da das nur funktioniert, wenn das Struct-Alignment richtig ist, wirst du wohl an System.Runtime.InteropServices.Marshal nicht vorbeikommen, hier solltest du mal ein paar Stündchen lesen. Simple und hier vielleicht angemessene Alternative: Daten als Byte-Array annehmen und von Hand ausdekodieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.