AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit #0 im String

Ein Thema von R2009 · begonnen am 28. Apr 2009 · letzter Beitrag vom 5. Mai 2009
Antwort Antwort
Seite 1 von 3  1 23      
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

Problem mit #0 im String

  Alt 28. Apr 2009, 09:36
Hi DP'ler,

ein kleines Problem:
In edit1 steht Hex (z.B. 0C4B3A). In edit2 soll nacher der Text als solches stehen.
Problem:
Sobald in edit1 eine "00" (Beispiel: 0C54003A übrig bleibt nur oC54) auftaucht geht der Rest des Strings bei der Zuweisung zu edit2 verloren.
Da edit2 aber nur ein "Zwischenspeicher" für den String ist darf das keinesfalls passieren.
Hat jemand eine Idee? (INVHEXB ist eine Funktion von mir und funktioniert einwandfrei)

Delphi-Quellcode:
  b:=edit1.text;
  a:='';
  while length(b)>1 do
    Begin
      t:=INVHEXB(b[1]+b[2]);
      a:=a+chr(t);
      delete(b,1,2);
    end;
  edit2.Text:=a;
Danke im Vorraus!
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#2

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 09:43
Moin, Moin.
Zitat:
In edit1 steht Hex (z.B. 0C4B3A). In edit2 soll nacher der Text als solches stehen.
Hmmm, verstehe ich nicht: In Edit1 ist ein String und der soll nach Edit2? Wozu der Umweg? Was passiert da? Und wieso ist die Zahl 0 = #0?? 0=#48!!
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 09:43
Tschaaa ... was soll man dazu sagen.

Sobald du eine binäre 0 im String hast, ist für die meisten Delphi-String-Routinen (und imho 99% aller anderen Sprachen + Windows) der String beendet. Das ist so eine Art Naturgesetz.

Um die Null darzustellen musst du dir irgendetwas einfallen lassen.

//Edit: obiger Text wurde dem revidierten Wissenstand angepasst
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
113 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 09:44
Du solltest deine InvHexB so umschreiben, dass sie für alle Steuerzeichen (0..31) eine Sonderbehandlung durchführt, sonst wirst du keinen Spass daran haben.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#5

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 09:48
... und wie kommt #0 in das EditFeld hinein?
Bevor ich die Symptome kuriere,
wäre es doch besser die Ursache zu beseitigen, oder?
Ralph
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 09:59
Zitat von chaosben:
Das ist so eine Art Naturgesetz.
Nicht ganz...
Delphi-Quellcode:
s := '1234'#0'6789';
Edit1.Text := s; // Anzeige 1234
ShowMessage(IntToStr(Length(s))); // 9!
String ist in Delphi durchaus in der Lage, auch #0 aufzunehmen, ohne die Länge zu kürzen. Nur Edit.Text ist wohl am Ende ein PChar, das dann bei der Anzeige tatsächlich abgeschnitten wird.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 10:01
Wie? Du benutzt Edit2 nur als Zwischenspeicher?

@Chaosben
Die Delphi-Strings haben ja gerade die Besonderheit sich nicht an einer #0 zu stören. Solange man auch nur mit DelphiStrings arbeitet ist das auch kein Problem. Nur die Übergabe zu dem von Windows verwalteten Edit erfolgt über PChar. Und erst da wird der String gekürzt.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Problem mit #0 im String

  Alt 28. Apr 2009, 13:10
Ja, ok ... das Obige war nicht korrekt.

Strings können auch 0-Zeichen enthalten. Die Einschränkung ist eben nur, das 90% der String-Routinen hintenrum auf PChars basieren und deswegen mit 0-Zeichen nichts anfangen können.

Und in diesem Fall gehts nicht, weil der Text eines Fenster/Edits per PChar gesetzt wird.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Problem mit #0 im String

  Alt 29. Apr 2009, 07:31
Hi,

ich wollte hier keine Diskussion anfangen warum ich das so oder so mache!

Hier nocheinmal eine kurze Erläuterung zur Problematik:
Beispiel:
ich muss den als Hex-Code voliegenden String zu einem Gerät binär übertragen (bei uns sind das Rundsteuerempfänger).
Hex als char
30313233 -->'0123'
das kann ich ohne weiteres übernehmen, kommt ja keine absolute 0 drin vor.
Sobald ich 30310033 übertragen will krieg ich nur noch 3031, weil ja plötzlich im zu sendenden String eine '0' steht.
'01'#0'2'
Dass da Nullen vorkommen ist ein 'Naturgesetz' und nicht umgehbar! Das Übertragungsprotokoll kann ich auch nicht ändern!
Wie machen das eigentlich die "C" Freaks?

Ich habe die Edit-felder gegen 'normale' Strings ausgetauscht jetzt funktioniert das alles.

Was mich stört ist:
Wieso wird der String in tedit (tedit.text ist nichts anderes als ein String) anders behandelt als ein normaler String.
Das ist doch Sch.... oder?

Für alle die immer alles besser wissen:
Die edit-Felder hab ich nur benutzt um zu sehen was passiert. Da das Ganze mit einer hohen Dynamik abläuft
kommt der Debugger nicht in Frage. Hab mir halt auf diese Art beholfen.

Vielen Dank für alle konstruktiven Beiträge!
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Problem mit #0 im String

  Alt 29. Apr 2009, 07:58
Zitat von R2009:
Was mich stört ist:
Wieso wird der String in tedit (tedit.text ist nichts anderes als ein String) anders behandelt als ein normaler String.
Das ist doch Sch.... oder?
Also zur Speicherung der binären Daten hast Du jetzt einen Datentyp genommen, der auch alle binären Zeichen speichern kann (Delphi-String, array of Byte wäre auch gegangen etc.)

Zur Anzeige musst Du die Daten aber aufbereiten, also Zeichen 0-31 und 127 ersetzen (Parser). Den TEdit.Text wurde zwar in Delphi als String implementiert, ist aber eigentlich ein PChar (das eben keine #0 als Datenbestandteil aufnehmen kann). Das kann mit dem Standard TEdit auch nicht geändert werden, ist ja ein Windows-Objekt.

Der einfachste Weg wäre, zur Datenspeicherung/Übermittlung Deine funktionierende Lösung und zur Anzeige den String aufbereiten.

#0 = '<NUL>'
...
#127 = '<ESC>'
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz