![]() |
Delphi2009+ --> (Ansi)String[n]
Hi,
Man kann ja ShortStrings mit einer bestimmten Länge definieren. Z.B.
Delphi-Quellcode:
Allerdings funktioniert folgendes nicht:
var
string2: String[2];
Delphi-Quellcode:
Gibt es da irgendetwas äquivalentes? Bei einem Array[0..1] of AnsiChar ist das Problem, dass man diesem Typ nicht direkt
var
string2: AnsiString[2]; einen String zuordnen kann. Gruß Neutral General |
Re: Delphi2009+ --> (Ansi)String[n]
String[n] definiert auch in Delphi 2009 und den folgenden noch einen Ansistring. Shortstrings gibt es nicht mit Unicode-Chars.
|
Re: Delphi2009+ --> (Ansi)String[n]
jupp, String/AnsiString/WideString/UnicodeString sind dynamische Arrays
String[n] und ShortString sind statische Arrays String[x] entspricht da
Delphi-Quellcode:
und ein ShortString ist String[255]
type
MyShortString = packed record Len: Byte; // entspricht Data[0] Data: array[1..x] of AnsiChar; end; wenn du unbedingt einen ShortString-artigen Typen haben willst, welcher Unicode kann, dann bastel dir einen aus 'nem Record ;) |
Re: Delphi2009+ --> (Ansi)String[n]
Zitat:
Aber das Gegenteil ist ja scheinbar von Natur aus der Fall :) Wobei ich das fast schon verwirrend finde... String = Unicode, String[n] = Ansi :? |
Re: Delphi2009+ --> (Ansi)String[n]
verwirrend ist es nur, weil EmCoBo unbedingt einem den Umstieg leicht machen wollte
und das möglichst ohne viel ändern zu müssen ... für ein Neuschreiben von Code finde ich das allerdings voll schrottig gelößt. das normale AnsiSameStr ist in D2009 übrigens auch Unicode und nicht Ansi usw. PS: es gibt auch noch String(n) als Typen ... das gibt dann 'ne Art Codierung an :wall: schade daß die Generics nur Typen und keine Konstanten annehmen, :cry: sonst ginge die zweie Definition auch
Delphi-Quellcode:
Type
TWideShortString255 = packed Record Private _Data: Array[0..255] of WideChar; Function GetData(i: Word): WideChar; Inline; Procedure SetData(i: Word; C: WideChar); Inline; Function GetLen: Word; Inline; Procedure SetLen (i: Word); Inline; Public Property Data[Index: Word]: WideChar Read GetData Write SetData; Default; Property Len: Word Read GetLen Write SetLen; End; TWideShortString<Size> = packed Record Private _Data: Array[0..Size] of WideChar; Function GetData(i: Byte): WideChar; Procedure SetData(i: Byte; C: WideChar); Function GetLen: Byte; Procedure SetLen (i: Byte); Public Property Data[Index: Byte]: WideChar Read GetData Write SetData; Default; Property Len: Byte Read GetLen Write SetLen; End; Function TWideShortString255.GetData(i: Word): WideChar; Begin Result := _Data[i]; End; Procedure TWideShortString255.SetData(i: Word; C: WideChar); Begin _Data[i] := C; End; Function TWideShortString255.GetLen: Word; Begin Result := Word(_Data[0]); End; Procedure TWideShortString255.SetLen(i: Word); Begin _Data[0] := WideChar(i); End; // Achtung: ohne Fehlerbehandlung |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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