mikrocontroller.net

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


Autor: Fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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#?

Autor: tuppes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.