WinFuture-Forum.de: C# Byte-array Strukturieren - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# Byte-array Strukturieren


#1 Mitglied ist offline   Ken Guru 

  • Gruppe: aktive Mitglieder
  • Beiträge: 256
  • Beigetreten: 06. November 06
  • Reputation: 0

  geschrieben 18. November 2007 - 11:30

Hi!

Ich habe ein byte-Array (512 Bytes). Ich möchte dieses an eine Struktur übergeben, um danach auf benannte Variablen zuzugreifen. In etwa so:

struktur s
{
byte[] id = new byte[4];
byte[] text = new byte[20];
...
}

s = byteArray;
Console.WriteLine("ID=", id);
Console.WriteLine("Text=", text);

Wie muss ich sowas in C# implementieren?

Gruss

Dieser Beitrag wurde von Ken Guru bearbeitet: 18. November 2007 - 14:03

[X] <- Touch here for a fettfleck on your monitor.
0

Anzeige



#2 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 19. November 2007 - 15:59

ich weiss nicht genau ob Strukturen in C# einen Konstruktor haben bzw methoden beinhalten könne, ich glaube aber nicht da eine Struktur eigentlich nur ein komplexer Datentyp ist

Demzufolge würde ich eine neue Klasse erstellen und mit den entsprechenden Objekten arbeiten -> müsste einfacher sein und genau das erfüllen was du möchtest ^_^

aber wie gesagt ich gebe keine Garantie drauf da ich es nich 100% weiss

greetz skelle

edit: und es müsste meiner Meinung nach heissen:

Console.WriteLine("ID=", byteArray.id);
Console.WriteLine("Text=", byteArray.text);

Dieser Beitrag wurde von skelle bearbeitet: 19. November 2007 - 16:00

0

#3 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 19. November 2007 - 16:34

Strukturen können in C# schon einen Konstruktor und sonstige Methoden enthalten, der Konstruktor muss jedoch mindestens 1 Argument haben.

struct S
{
	// Nur unter C# 3.0 möglich, ansonsten einfach "{ get; }" weglassen
	public byte[] Id { get; };
	public byte[] Text { get; };

	public s(byte[] a)
	{
		/* Hier halt dann id und text entsprechend setzen
		Id = a.....
		Text = a..... */
	}
}

S struktur = new S(byteArray);
Console.WriteLine(struktur.Id);
Console.WriteLine(struktur.Text);

Dieser Beitrag wurde von christoph_hausner bearbeitet: 19. November 2007 - 17:46

0

#4 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 19. November 2007 - 17:28

ok denn kann man die sache mit der klasse weg lassen ^_^
0

#5 Mitglied ist offline   Ken Guru 

  • Gruppe: aktive Mitglieder
  • Beiträge: 256
  • Beigetreten: 06. November 06
  • Reputation: 0

geschrieben 20. November 2007 - 16:02

Hallo!

Nee Männers, eure Ansätze gehen an meinem Problem vorbei. Habe mittlerweile eine Lösung die auf

[StructLayout(LayoutKind.Sequential, Pack = 0, CharSet = CharSet.Unicode)]
public struct Union
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst=3)]
public byte[] id;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=128)]
public byte[] texte;
}

und der Kernel32-API "MoveMemory" basieren. Der Trick ist ja, dass ich unstrukturierten Speicher fester Länge in diese Union schiebe und danach auf die Speicherbereiche per Namen zugreifen kann. Der Ansatz von Christoph ist, das Benennen händisch (Id = a.....) zu machen . Ich wills aber automatisch, da ich faul bin :rolleyes:

Danke
[X] <- Touch here for a fettfleck on your monitor.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0