C-structs, wie in C# richtig machen

Gast #1159919
Lesenswert?

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#?
Gast #1159945
Lesenswert?

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.

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