Forums Neueste Beiträge
 

Serielle Schnittstelle: Zeichen werden ersetzt /Codierungsproblem ?

12/01/2009 - 09:53 von Nicolas Nickisch | Report spam
Hi NG,
Ich habe hier ein über die serielle Schnittstelle angesprochenes Geràt
welches in einer Art Binàrprotokoll sendet und empfàngt (ach ?)

Beim Empfang stelle ich jetzt fest, dass z.b. ein Zeichen 0x80 in 0x3f
gewandelt wird.
Allerdings bin ich mir auf einmal nicht mehr sicher, ob dies bereits die
SerialPort-Komponente veranstaltet oder die anschliessende umwandlung in ein
Byte-Array.

Ich lese zunàchst alle verfügbaren Zeichen ein
tmp_str = Serial1.ReadExisting()

Debug.Indent()

Debug.WriteLine("Anzahl Zeichen gelesen: " & tmp_str.Length.ToString)

ss = ss + tmp_str 'und an Warteschlange anh"ngen

Ich mache das so, weil die Lànge der empfangenen Bitschaften variieren kann.

Danach bestimme ich in einer Auswerteroutine die Position eines betsimmten
Codes in dem String, der das Ende einer Botschaft signalisiert.

FirstEOT = RX_str.IndexOf(Chr(EOT))

'(teil-)string in Array wandeln

tmp_array = System.Text.Encoding.Default.GetBytes(RX_str.Substring(0,
FirstEOT + 1))

Eine Simulation hat ergeben, dass die letztere Anweisung wohl nicht der
Übeltàter ist, sondern die Umwandelung bereits in der seriellen
Schnittstelle erfolgt.

Das hat bestimmt etwas mit der Serial1.Encoding-Eingenschaft zu tun,
allerdings habe ich noch keine Lösung erzielen lkönnen.



Kann mir jemand einen Tip geben ?



Gruss Nico
 

Lesen sie die antworten

#1 Christoph Schneegans
12/01/2009 - 11:00 | Warnen spam
Nicolas Nickisch schrieb:

Beim Empfang stelle ich jetzt fest, dass z.b. ein Zeichen 0x80 in
0x3f gewandelt wird.



0x80 ist kein Zeichen, sondern ein Byte.

Wenn eine Encoding-Instanz ein Zeichen nicht codieren kann, gibt sie
ein Byte zurück, das dem Zeichen "?" entspricht – bei ASCII-
basierten Codierung ist das gerade das Byte 0x3F. Eine ASCIIEncoding-
Instanz verhàlt sich für alle Nicht-ASCII-Zeichen so, d.h.

MessageBox.Show(Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("àöü")))

gibt nicht "àöü" aus, sondern "???".

Analog kann eine mit Encoding.GetEncoding("ISO-8859-1") erzeugte Instanz das
Zeichen "€" nicht codieren. Wer schreibt denn was in die serielle
Schnittstelle?

<http://schneegans.de/expression-web...erung/> · Unicode in xWeb

Ähnliche fragen