![]() |
Re: StrLen / SizeOf mag Chr(0) nicht?
Als "Stringtrenner" benutze ich notfalls das auf dem Kopf stehende spanische Fragezeichen, da es noch nicht mal Spanier "aus Versehen" eintippen können :mrgreen:
|
Re: StrLen / SizeOf mag Chr(0) nicht?
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:
ach ja, es darf nur ein Array übergeben werden, welches mit #0#0 endet ... sonst kommt es schnell mal zu 'ner Exception (Zugriffsverletzung)
// 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; |
Re: StrLen / SizeOf mag Chr(0) nicht?
Zitat:
wenn du das dennoch brauchst, kannst dir ja deine eigene struktur zusammenpasteln ... |
Re: StrLen / SizeOf mag Chr(0) nicht?
Delphi-Quellcode:
i := StrLen0Array(PChar(sOutput)); // Funktion siehe oben
Zitat:
wonach der Wert natürlich korrekt wäre :zwinker: Zitat:
Windows nutzt ja selber an vielen Stellen eine derartige Strucktur z.B. im Open-/Savedialog und in der Registry (REG_MULTI_SZ) Zitat:
es bieten sch für Texte ja einige Zeichen an ... meistens alles in den Bereichen #1-#7, #11, #12 und #14-#31 |
Re: StrLen / SizeOf mag Chr(0) nicht?
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).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz