Laden...

serielle Kommunikation: jeweils zwei empfagene Bytes in Integers wandeln

Erstellt von mono vor 13 Jahren Letzter Beitrag vor 13 Jahren 987 Views
Thema geschlossen
M
mono Themenstarter:in
1 Beiträge seit 2011
vor 13 Jahren
serielle Kommunikation: jeweils zwei empfagene Bytes in Integers wandeln

Hallo!

Ich bin absoluter C#-Anfänger und bin mir dementsprechend nicht sicher, in wie weit man hier bereit ist, mir bei meinen Problemen zu helfen - versuchen möchte ich's trotzdem mal. Sollte es hier nicht herpassen, wäre ein kurzer expliziter Hinweis darauf nett...

Zum eigentlichen Problem: Ich habe eine kleine Microcontroller-Schaltung, die mir per serieller Schnittstelle 8 Datenbytes sendet, die abschließend mit CR und LF terminiert werden (es werden also ings. 10 bytes gesendet). Dieses lese ich in C# mit ReadLine() ein in einem DataReceived Event-Handler ein. An dieser Stelle habe ich die ersten Fragen:

Welches sind die default NewLine Zeichen? Also welche Zeichen in meinem gesendeten String führen dazu, dass ReadLine() eine Zeile für beendet hält?

Wie kann ich diese Verändern, im meinem Falle praktischweise auf CR/LF (falls das nicht default ist)?

Das übergrordnete Problem ist, dass ich aus den acht empfangenen Bytes vier Integers machen möchte. Die ersten zwei Bytes entsprechen also High- und Lowbyte des ersten Integers, das dritte und vierte Byte High- und Lowbyte des zweiten Integers, usw. Auch da habe ich noch keinen Ansatz gefunden...

Ich bin sehr dankbar für alles Tipps und Hinweise!

Gruß
Mono

Hinweis von herbivore vor 13 Jahren

wäre ein kurzer expliziter Hinweis darauf nett...

Bitte sehr: [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.

B
387 Beiträge seit 2005
vor 13 Jahren

Hi mono,

ich könnte dir zur Umwandlung zwei Möglichkeiten vorschlagen:

  1. du nutzt BitConverter..
BitConverter.ToInt16(...);
  1. du rechnest einfach selber..
short myValues = byte1 * 256 + byte2;

In beiden Fällen gilt: Endianness beachten! Siehe Wikipedia (Bei erster Variante gilt auf X86-Prozessoren LittleEndian).

Die Zeichen, die von ReadLine verwendet werden, kannst du mit dieser Eigenschaft abfragen:

Environment.NewLine

Müsste CR und LF entsprechen, sicherheitshalber würde ich da aber nochmal nachschauen. Empfehlen würde ich dir bei solchen Geschichten aber nicht ReadLine zu verwenden, sondern die Bytes einzeln zu lesen und selber auf das Ende abprüfen.

Gruß
Roland

U
1.688 Beiträge seit 2007
vor 13 Jahren

Hallo mono,

bitte immer in die Doku schauen!

Die Zeichen, die von ReadLine verwendet werden, kannst du mit dieser Eigenschaft abfragen:

eigentlich ist's SerialPort.NewLine und der Standard ist Line-Feed. Damit lässt sich der Wert auch ändern.

Thema geschlossen