AGB  ·  Datenschutz  ·  Impressum  







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

StrLen / SizeOf mag Chr(0) nicht?

Ein Thema von xSkaschY · begonnen am 3. Aug 2008 · letzter Beitrag vom 4. Aug 2008
Antwort Antwort
Seite 2 von 2     12   
rotfc
(Gast)

n/a Beiträge
 
#11

Re: StrLen / SizeOf mag Chr(0) nicht?

  Alt 3. Aug 2008, 11:55
Als "Stringtrenner" benutze ich notfalls das auf dem Kopf stehende spanische Fragezeichen, da es noch nicht mal Spanier "aus Versehen" eintippen können
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

Re: StrLen / SizeOf mag Chr(0) nicht?

  Alt 3. Aug 2008, 12:22
Die null ist nunmal der Trenner von den netten WindowsArrays (kennt man z.B. vom OpenDialog (WinAPI), nur das da intern in TOpenialog ein "|" verwendet wird, da die viele Stringoperationen mit der #0 nicht klarkommen)

Delphi-Quellcode:
// Result = string/array-length exclusive terminating #0#0

Function StrLen0Array(P: PChar): Integer;
  Var i: Integer;

  Begin
    Result := 0;
    If P = nil Then Exit;
    Repeat
      i := StrLen(P);
      Inc(Result, i + 1);
      Inc(P, i + 1);
    Until i = 0;
    Dec(Result, 2);
  End;
ach ja, es darf nur ein Array übergeben werden, welches mit #0#0 endet ... sonst kommt es schnell mal zu 'ner Exception (Zugriffsverletzung)
$2B or not $2B
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#13

Re: StrLen / SizeOf mag Chr(0) nicht?

  Alt 3. Aug 2008, 21:18
Zitat von xaromz:
Hallo,

warum eigentlich nicht Delphi-Referenz durchsuchenLength()? Das greift auf die Größe des Speicherbereichs zu und lässt sich von Nullzeichen nicht aufhalten.

Gruß
xaromz
kommt auf die stringdefinition an. je nach string art, wird die länge eben anders ermittelt, mal wird einzeln abgezählt bis #0, mal wird über das längenbyte/längenpointer referenziert. das mit #0 ist einfach eine däm* idee.

wenn du das dennoch brauchst, kannst dir ja deine eigene struktur zusammenpasteln ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

Re: StrLen / SizeOf mag Chr(0) nicht?

  Alt 4. Aug 2008, 15:35
i := StrLen0Array(PChar(sOutput)); // Funktion siehe oben
Zitat von Hawkeye219:
v := StrToFloat(s); // sollte einen Fehler auslösen, tut das aber nicht...
nja, diese Funktion nimmt halt die #0 als Kennung für das Stringende,
wonach der Wert natürlich korrekt wäre


Zitat:
Eine möglichkeit wäre, alle vorhandenen Wörter zu zählen und einfach die Chr(0) mit +1 zu addieren, halte dies aber für "unsauber" und nicht redunant, anything else?
eine andere Möglichkeit gibt es aber nicht und für so unsauber halte ich es ebenfalls nicht


Windows nutzt ja selber an vielen Stellen eine derartige Strucktur
z.B. im Open-/Savedialog und in der Registry (REG_MULTI_SZ)

Zitat:
Chr(0); ist nur ein Trenner, da ich diese Daten durch nen Socket schiebe und ich die auf der Gegenstelle weiter verarbeite habe ich mir diesen Trenner so angewöhnt.
nja, wenn das so ist, dann könntest du dich natürlich auch an ein anderes Zichen gewöhnen

es bieten sch für Texte ja einige Zeichen an ...
meistens alles in den Bereichen #1-#7, #11, #12 und #14-#31
$2B or not $2B
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#15

Re: StrLen / SizeOf mag Chr(0) nicht?

  Alt 4. Aug 2008, 15:55
Muss es denn ein String sein? Du könntest auch mit einem Memorystream arbeiten, da wäre das #0 kein Problem, und du statt ein Trennzeichens zu verwenden auch einfach eine Längenangabe vor jeden Wert schreiben, sodass du dann auch kein Problem hättest, wenn in deinen Daten mal ein #0 vorkommt (was ja bei Binärdaten z.B. nicht ungewöhnlich ist).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:02 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