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
wie liest du denn die Daten ein? Wenn die Read funktion selber ein array liefert dann wird deine alte größe damit überschrieben.
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]
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
@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
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.
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.