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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten