Forum: PC-Programmierung C-structs, wie in C# richtig machen


von Fragender (Gast)


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#?

von tuppes (Gast)


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.

von Markus (Gast)


Lesenswert?


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
Noch kein Account? Hier anmelden.