Wie muss ein Chr(0) in einem String verarbeitet werden.

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
AndyHesse
Beiträge: 3
Registriert: Mi 17. Okt 2007, 14:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bergisch-Gladbach

Wie muss ein Chr(0) in einem String verarbeitet werden.

Beitrag von AndyHesse »

Hallo,

mein Anliegen ist vermutlich eher akademischer Natur...

Ich habe ein Programm geschrieben, dass Meldungen von einem µC über die serielle Schnittstelle empfängt.
Normalerweise sendet der µC codierte Meldungen, worin eben auch ein Bytewert mal "Null" sein kann.
Zum Debuggen sende ich manchmal auch einfach Textmeldungen.
In der PC Anwendung werden empfangen Zeichen dann zunächst mal in ein Memo geschrieben, wo Text eben als Text angezeigt wird und die Meldungen Hexadezimal angezeigt werden.
Das alles funktioniert wie erwartet.

Beim Tesen habe ich mal folgenden String probiert:

Teststring := 'Test123' + #27 + #1 + #0 + 'ABCDEFGHI';

Wenn ich dann z.B.
showmessage(Teststring);

wird 'Test123' + ein paar unleserliche Zeichen ausgegeben.

Wenn ich den Text dann einfach ins Memo schreibe, erhalte ich
'Test123' + zwei Steuerzeichen (#27 und #1)
Meine HEX-Ausgabe geht einfach über die Länge des Strings und gibt dann aber die korrekten Hexadezimalen Entsprechnungen für 'Test123' + #27 + #1 + #0 + 'ABCDEFGHI' aus.

Ich hatte also erwartet, dass der Chr(0) bei einem Pascal String als normales Zeichen verarbeitet wird, was aber scheinbar nicht so ist.
Wie muss es denn richtig sein?

Gruss
Andreas

Benutzeravatar
theo
Beiträge: 10949
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie muss ein Chr(0) in einem String verarbeitet werden.

Beitrag von theo »

Bei Null-Terminierten Strings ist das nicht gut. #0 Sollte nicht im String vorkommen, das gibt spätestens bei der Ausgabe Probleme.
http://de.wikipedia.org/wiki/Zeichenket ... usszeichen" onclick="window.open(this.href);return false;

AndyHesse
Beiträge: 3
Registriert: Mi 17. Okt 2007, 14:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bergisch-Gladbach

Re: Wie muss ein Chr(0) in einem String verarbeitet werden.

Beitrag von AndyHesse »

Hi

danke für die Antwort,

Ich dachte allerdings, der Pascal String hat ein Längenbyte, so dass das eigentlich egal sein sollte.
Grundsätzlich zeigt die Funktion "Length" ja auch die erwartete Länge inklusive #0 und den angehängten Zeichen.

Gruss
Andreas

Benutzeravatar
theo
Beiträge: 10949
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie muss ein Chr(0) in einem String verarbeitet werden.

Beitrag von theo »

AndyHesse hat geschrieben: Ich dachte allerdings, der Pascal String hat ein Längenbyte, so dass das eigentlich egal sein sollte.
Grundsätzlich zeigt die Funktion "Length" ja auch die erwartete Länge inklusive #0 und den angehängten Zeichen.
Pascal wäre das schon egal, aber dem Betriebssystem, welches das Ding auf den Screen bringen muss nicht.

AndyHesse
Beiträge: 3
Registriert: Mi 17. Okt 2007, 14:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Bergisch-Gladbach

Re: Wie muss ein Chr(0) in einem String verarbeitet werden.

Beitrag von AndyHesse »

Hi,

danke für die Antwort. Schönes Wochenende.

Gruss
Andreas

Antworten