Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 10.11.14 21:26 
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:
ausblenden C#-Quelltext
1:
2:
3:
4:
s = "\x41\xF1"+textBox1.Text; //textBox1.Text enthält einfach mal "123"
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
ausblenden C#-Quelltext
1:
s="\x41F1"+textBox1.Text;					

versucht, ohne Erfolg.

Wie mache ich es richtig ?

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 10.11.14 22:06 
Es sind bytes also warum da erst Text draus machen?

ausblenden C#-Quelltext
1:
2:
3:
var preamble = new byte[] { 0x410xF1 };
var bytes = preamble.Concat(Encoding.ASCII.GetBytes(textBox1.Text)).ToArray();            
client.Send(bytes, bytes.Count);
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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 !

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.11.14 23:37 
user profile iconOlafSt hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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) ;)

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.