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.