AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi 2009: String, UnicodeString oder WideString?
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 2009: String, UnicodeString oder WideString?

Ein Thema von romber · begonnen am 26. Feb 2010 · letzter Beitrag vom 3. Nov 2014
Antwort Antwort
Seite 2 von 2     12   
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Delphi 2009: String, UnicodeString oder WideString?

  Alt 3. Nov 2014, 17:27
Das mit der Länge gilt eigentlich seit D1 nicht mehr, sondern nur für ShortString. ( String wurde aber u.U. je nach Einstellung bei D < D2009 als ShortString implementiert).

Bei AnsiString/UnicodeString ( außer bei nextgen) beginnt der Index zwar ab 1 (Rückwärtskompatibilität), die Implementierung ist aber wie bei C eine 0 terminierter String ( an Stelle 1 steht ein Zeiger auf den eigentlichen String)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi 2009: String, UnicodeString oder WideString?

  Alt 3. Nov 2014, 18:09
Für den genauen Aufbau siehe System.pas, wo es auch seit 2009 ein paar Funktionen zum Auslesen/Bearbeiten gibt, vorallem von der CodePage.


WideString geht schon immer auf die OleAuth32.dll und stellt quasi nur einen Wrapper dar, welcher u.A. auf MSDN-Library durchsuchenSysAllocString weiterleitet. Dafür ist das praktisch in jeder Sprache verfügbar.

String ist ein compilerabhängiger "Alias" und geht auf AnsiString (D2 bis D2007), UnicodeString (seit D2009) und ShortString (D1, wobei es dort nur diesen String gab und es noch keine Alias war)

intern ist es ein aufgemotztes "dynamisches Array"
  • in Windows mit Offset von 1 -> Index 0 = Char 1, wegen Abwärtskompatibilität zum alten ShortString
  • Pointer zeigt auf erstes Zeichen, hinten gibt es noch zwei implizite #0
  • vor dem ersten Zeichen liegen die Integer Länge und Referenzzählung
  • und seit D2009 nochmal davor zwei Word für CodePage und CharSize
  • im Gegensatz zu den normalen dyn. Arrays funktioniert hier auch das CopyOnWrite (Bei Schreibzugriffen auf einzelne Zeichen, mit einem RefCount größer 1, wird eine Kopie angelegt und damit gearbeitet)
  • Konstanten haben einen RefCount von -1


PS: Schaut mal in die OH ... dort tut wirklich manchmal jemand was und man hat den String-Aufbau dort nun auch endlich mal dokumentiert.

Zitat:
außer bei nextgen
Ich bin mir nicht ganz sicher wer, aber entweder im Nextgen oder im Windows kann man per Compilerschalter das Verhalten umstellen.

Delphi-Referenz durchsuchenStringElementSize
Delphi-Referenz durchsuchenStringCodePage / Delphi-Referenz durchsuchenSetCodePage
Delphi-Referenz durchsuchenStringRefCount / Delphi-Referenz durchsuchenUniqueString
$2B or not $2B

Geändert von himitsu ( 3. Nov 2014 um 18:15 Uhr)
  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 14:56 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