Entwickler-Ecke
Basistechnologien - Unicode-Problem mit ASCII "F1"
OlafSt - Mo 10.11.14 21:26
Titel: Unicode-Problem mit ASCII "F1"
Hallo Freunde,
seit zwei Stunden bastel ich an einem typischen Unicode-Problem herum, finde aber keine Lösung.
Ich muß Daten an eine kleine Settop-Box senden (UDP). Die Daten sind durchgehend normale ASCII-Texte, erfordern aber einen spezifischen Header. Dieser Header enthält das ASCII-Zeichen "\xF1" - und dieses macht mich langsam wahnsinnig.
Ich dachte mir in meiner Naivität:
C#-Quelltext
1: 2: 3: 4:
| s = "\x41\xF1"+textBox1.Text; ASCIIEncoding ae = new ASCIIEncoding(); byte[] b = ae.GetBytes(s); client.Send(b, b.Getlength(0)); |
Das Ergebnis in b[] müsste sein: 0x41 0xF1 0x31 0x32 0x33.
Ist es nicht, sondern 0x41 0x3F 0x31 0x32 0x33.
Ist irgendwie logisch, mein \xF1-Zeichen wird ein Unicodezeichen und ASCIIEncoding tut sein bestes - aber falsches. Ich habe auch schon
C#-Quelltext
1:
| s="\x41F1"+textBox1.Text; |
versucht, ohne Erfolg.
Wie mache ich es richtig ?
Ralf Jansen - Mo 10.11.14 22:06
Es sind bytes also warum da erst Text draus machen?
C#-Quelltext
1: 2: 3:
| var preamble = new byte[] { 0x41, 0xF1 }; var bytes = preamble.Concat(Encoding.ASCII.GetBytes(textBox1.Text)).ToArray(); client.Send(bytes, bytes.Count); |
OlafSt - Mo 10.11.14 22:09
Wald -> Bäume.
ich stecke echt noch zu tief in den Delphi-Methodiken drin, fürchte ich. Wieder was gelernt, danke !
jaenicke - Mo 10.11.14 23:37
OlafSt hat folgendes geschrieben : |
ich stecke echt noch zu tief in den Delphi-Methodiken drin, fürchte ich. |
Da hätte man das aber sauber auch nicht anders gemacht. ;-)
Das ganze Gebastel mit AnsiStrings als Containern für Daten für serielle Ports usw. hat prozentual vermutlich einen hohen Anteil der Probleme bei der Umstellung auf Delphi mit Unicode verursacht...
OlafSt - Di 11.11.14 10:39
Stimme ich vorbehaltlos zu.
Allerdings: Was wäre denn die Alternative gewesen ? So coole Konstrukte wie List<byte> gibts noch nicht allzu lange - besonders, wenn man bedenkt, wie lange man schon serielle Geräte mit dem PC ansteuern kann. Wenn man solche Kommandoketten Stück für Stück zusammenbauen muß, schreits geradezu nach Strings, denn nix anderes läßt sich so einfach in der Größe erweitern wie die Dinger (oder war ein superpraktischer Buffer mit 255 Bytes Größe) ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!