mikrocontroller.net

Forum: PC-Programmierung C# Struktur in ein Array ablegen


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe eine Struktur die sagen wir, 2 Byte Typen und 2 Int Typen enthält

public struct test
{
    byte a1;
    byte a2;
    int  b1;
    int  b2;
}



Nun möchte ich diese Struktur in ein Byte Array der länge 6 
hineinschreiben.


test o_test = new test();
byte array = new byte[6];

array = o_test;        --> Klar, geht so nicht. Soll zeigen, was ich 
meine.

Wie kann ich sowas in C# machen?

array[0] = o_test.a1;
:
:

So könnte ich das auch mache. Bei den ints dann mit hin und her schiften 
würde das auch gehen. Ist aber wohl eher nicht die elegante Art.

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten mit dem BinaryFormatter in einen MemoryStream Serialisieren, 
aus diesem Stream bekommst du dann mit ToArray das ganze als Byte - 
Array.
[Serializeable]
struct MyStruct {...}

//...

using(MemoryStream stream = new MemoryStream()){
  BinaryFormatter formatter = new BinaryFormatter();
  formatter.Serialize(stream, myStructVariable);
  myArr = stream.ToArray();
}

(Ungetestet, hier im Forum implementiert)

greetz

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem Union würde es wahrscheinlich auch gehen, aber das macht man 
eher in C / C++ so, würde daher auch zum serialisieren raten.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach Anwendungsfall gibt's auch noch folgende Möglichkeiten:
1. BitConverter.GetBytes bzw. BitConverter.ToXYZ
2. Marshal.PtrToStructure bzw. Marshal.StructureToPtr

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.