Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Warum geht dies nicht Chr (000) ???


Hans Molter - Mi 19.02.03 20:08
Titel: Warum geht dies nicht Chr (000) ???
Hallo !

Habe folgendes Problem

Quelltext
1:
Head_read : array [1..16] of Char;                    

wenn nun einzeln Zeichen zugewiesen werden , ist nach der zuweiseung der einzelnen Byte das 4. Zeichen nicht in Memo1 angehängt/übernommen

Quelltext
1:
2:
3:
4:
5:
Head_read  [1] := Chr (065);
Head_read  [2] := Chr (066);
Head_read  [3] := Chr (000); <---- ursache !!!
Head_read  [4] := Chr (067);  
Memo1.Lines.Add (Head_read) ;   ---> AB    sollte AB C eintragen

!!! Auch weitere Zeichenzuweisung nach [3] werden ncht dargestellt

Bitte um Info .....und ich sag schon danke für die Unterstützung !!!

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


smiegel - Mi 19.02.03 20:11

Hallo,

das wird so nichts. Alle Zeichen kleiner 32 sind Steuerzeichen und können nicht dargestellt werden. Was Chr(0) genau macht, kann ich leider nicht mehr sagen.

Wenn Du ein Leerzeichen einfügen willst musst Du Chr(032) benutzen.


Hans Molter - Mi 19.02.03 20:25

Danke für die Info

mh Hintergrund ist folgendes ...TCP kopplung und da soll im Header Stelle x.x 00 Hex stehen ...tja und nun such ich nach Möglichkeiten dies einzutragen
das komische an der sache (Steuerzeichen ) wenn Chr (001) kann ohne Probleme verwendet werden auch nachfolgende zuordnungen werde übernommen/angezeigt

Ps : Vieleicht kann man anders dies einen Pchar ....übergeben bzw
der Funktion ....Socket.SendText oder SendBuf

danke !


smiegel - Mi 19.02.03 20:34

Hallo,

wenn da eine Null (0) stehen soll, kannst Du doch Chr(48) verwenden?


Wolff68 - Mi 19.02.03 20:48

IMHO ist CHR(0) das Ende-Zeichen eines Strings. Mit PChar oder Pascal-Strings (String[255]) sollte es eher gehen. Das ganze aber in einem Memo anzuzeigen wird wohl scheitern, weil alles unter 32 nicht darstellbar ist, und interpretiert wird (zB TAB)


Hans Molter - Mi 19.02.03 20:53

hi

nicht 0 in als text Zeichen , sondern 00 in HEX ...denn 048 würde 30 Hex bedeuten ....tja und ich bin noch am überlegen wie ich dies umwandeln kann? Wenn ich alles mal Sniffermäßig auf LAN dies anschaue und zB. Chr (001) eintrage ...so wird auch in Hex 01 gesendet /übertragen.. also muß doch das gehen!

Habe auch schon mit Ansi probiert ... gleicher effekt aber wie heißt es ... nicht verzagen Forum fragen ..... ich denk das event Compiler nach der Anweisung Chr (000) einfach weiter Zuweisungen ignoriert oder .... Auch unter Delphi 6 gleiche Problem naja ...man soll nicht aufgeben


Klabautermann - Do 20.02.03 11:24

Hallo,
Wolff68 hat folgendes geschrieben:
IMHO ist CHR(0) das Ende-Zeichen eines Strings. Mit PChar oder Pascal-Strings (String[255]) sollte es eher gehen.

nicht ganz. Das #0 ist das Ende Zeichen eines C-Strings also eines pChar. Das Array OF Char entspricht einem Solchen C-String. Ich weis ja nicht wie Hans Molter das in sein Memo füllt, ich gehe aber davon aus, das er (wenn auch indireckt) einen pChar übergibt. Bei der Interpretation sieht das Programm dann die #0 erkennte "richtig" hier ist der String zuende und ignoriert alles was danach kommt.

Gruß
Klabautermann


Hans Molter - Do 20.02.03 17:14

Hallo

also das mit array of Char habe ich nun anders gelöst array of Byte
Dadurch kann ich auch eine 00 zuweisen und nachfolgende Eintragungen werden nicht einfach abgeschnitten , bzw diese kann somit auch an bestimmten Stellen eines Header für Winsocket Kommunikation gesendet werden ....auch schon mit erfolgt durchgeführt !!

also somit erledigt , bzw muß halt zur Darstellung in Anwendung noch was ändern! aber danke für die schnelle reaktion