www.mikrocontroller.net

Forum: PC-Programmierung C# Array Felder


Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verstehe eine Sache mit Arrays unter C# nicht.
Ich habe global ein Array deklariert:

byte[] RxBuffer = new byte[64];

Wenn ich im

private void spModem_DataReceived(object sender, 
System.IO.Ports.SerialDataReceivedEventArgs e)

Das Array fülle bekomme ich zunächt mit serialport.ReadExisting() nur 14 
Felder gefüllt. Das Array ist dann auch nur 14 Felder lang. Ich muss 
aber ein 2. Paket anhängen. Also ab Index 14. Nur schmeist mir der 
Debugger dann eine exception, das Array ware zu klein ??? Das 2. Paket 
ist aber nur ein paar Byte groß. Warum kann ich auf die restlichen 
Felder bis 63 nicht zugreifen?

Gruß
Rolf






IDE: Visual C# 2005 Express Edition

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie liest du denn die Daten ein? Wenn die Read funktion selber ein array 
liefert dann wird deine alte größe damit überschrieben.

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so:
sData = spModem.ReadExisting();
RxBuffer = enc.GetBytes(sData);

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf schrieb:
> RxBuffer = enc.GetBytes(sData);

Damit überschreibst du dein Array.
Dein Array ist nun nicht mehr dein Altes, sondern ein neues 14 byte 
langes Array.

Nimm eine List<byte> und nimm die AddRange-Methode oder schreibt dir 
deine Kopiermethode selber:
byte[] temp = enc.GetBytes(sData);
und jetzt kopierst du byte-weise RxBuffer[i] = temp[i]

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf schrieb:
> sData = spModem.ReadExisting();
> RxBuffer = enc.GetBytes(sData)

warum geht du den umweg über einen string? lies doch gleich das array 
richtig ein.

http://msdn.microsoft.com/de-de/library/ms143549.aspx

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Samuel K.
Danke für die Info. Ich kopiere jetzt den String in einen TempBuffer und 
von dort aus stückchenweise, bei jedem neuen Teilempfang, in den 
RxBuffer. So klappts.

@Peter
Man bekommt überall eingebimst das man die ReadExisting() Methode nehmen 
soll. Die gibt nur einen String zurück.

Gruß
Rolf

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf schrieb:
> @Peter
> Man bekommt überall eingebimst das man die ReadExisting() Methode nehmen
> soll. Die gibt nur einen String zurück.

nein man sollte das nehmen was für den zweck das richtige ist. Und wenn 
du ein byte array willst dann nimmt man die Read Methode. Man muss ja 
nicht die fehler von anderen nachmachen. Stirngs haben den nachteil das 
sie eine Zeichensatzkonvertierung durchführen. Wenn es also mal kein 
Klartext-Protokoll ist dann geht das schief.

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.