![]() |
Delphi-Version: 10 Seattle
Explizit nach String[20] casten?
Ich bin gerade dabei meine Fehler "Implizite String-Umwandlung" auszumerzen.
Dabei bin ich auf eine Zuweisung gestossen, bei der ich explizit nach String[20] casten muss. Ich kenne die Syntax dafuer aber nicht und die Suche nach der Information gestaltet sich etwas schwierig.
Code:
Ich braeuchte sowas wie
var
Name: String[20]; begin //... Name := TEdit(Sender).Text;
Code:
um explizit zu casten.
Name := String[20](TEdit(Sender).Text);
Eine Abweichung von String[20] ist keine Option. Danke! |
AW: Explizit nach String[20] casten?
ist nicht ein Short-String ein Ansistring?
Delphi-Quellcode:
Name := AnsiString(TEdit(Sender).Text);
|
AW: Explizit nach String[20] casten?
.. was soll passieren wenn der Text im Edit länger als 20 Zeichen ist? Kürzen des Textes?
.. was soll passieren wenn der Text im Edit kürzer als 20 Zeichen ist? Padding? Grüße Klaus |
AW: Explizit nach String[20] casten?
Zitat:
|
AW: Explizit nach String[20] casten?
Zitat:
Zitat:
2. Gar nix, das gleiche wie wenn ein ShortString kuerzer als 255 Zeichen ist |
AW: Explizit nach String[20] casten?
Eigenmtlich benötigt man Shortstrings oder
Delphi-Quellcode:
nur wenn man irgendwelche Tricksereien durchführen möchte. Das geht von
var
mystring:string[x];
Delphi-Quellcode:
bis zu
for i:=1 to Byte(mystring[0]) do {statt length()
Delphi-Quellcode:
oder man muß mit fixen Satzlängen/Stringlängen arbeiten aber da bevorzuge ich das
mystring[0]:=0 {statt ''}
Delphi-Quellcode:
Gruß
mycharray:array [1..x] of ansichar {/char}
K-H |
AW: Explizit nach String[20] casten?
Ja, leider benoetige ich String[20] fuer exotische Tricksereien.
Der String[20] ist in einem packed Record, der als Objekt in einen zLib CompressionStream -> uTPLb_CryptographicLibrary EncryptionStream -> File fliesst. Die Kompression->Verschluesselung benoetigt Arrays mit fester Laenge in Record; Da ich Millionen dieser Mini-Dateien (ein paar hundert Bytes pro) speichern muss, kann ich keine vollen Datentypen benutzen, da sonst die FileSize der Dateien ununoetig in die Hoehe getrieben wird. |
AW: Explizit nach String[20] casten?
Man kann sich auch selber einen Record-String bastelt.
Delphi-Quellcode:
// WideChar oder AnsiChar, wegen fester größe bei der Übertragung
x: array[0..x] of WideChar
Delphi kann da zeilweise automatisch zwischen String und diesem Array konvertieren. Das ganze pappt man dann noch in einen Record, batelt implizite Casts von/zu String dran und kann dann intern in AnsiChar z.B. als UTF8 speichern. Alternativ: TPersistent nehmen da als Property seine Daten rein und dieses Datenobject lässt sich dann einfach mit Systemmitteln in einen Stream serialisieren und wieder deserialisieren, was dann auch mit dynamischer Länge funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 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-2025 by Thomas Breitkreuz