AGB  ·  Datenschutz  ·  Impressum  







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

AnsiString in Android App

Ein Thema von Alex_ITA01 · begonnen am 16. Sep 2014 · letzter Beitrag vom 23. Apr 2015
Antwort Antwort
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#1

AW: AnsiString in Android App

  Alt 18. Sep 2014, 09:36
Danke für deine Erklärung.

Zitat:
{$ZEROBASEDSTRINGS ON}
Da ist das erste Zeichen im String bei S[0] und nicht bei S[1] , welches (das mit der 0) nun der Standard in Android und iOS ist.
Du mußt also aufpassen, wenn du den selben Delphi-Code für Windows verwendest, oder fürs Mobile, da dort die Indize im String nun alle verschoben sind.
Gibt es hierzu Informationen, warum man das so für IOS und Android gemacht hat (also mit S[0] als ersten Char anzufangen)?
Wo steht dann die Längeninformation? Oder gibts die nicht mehr?

Viele Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: AnsiString in Android App

  Alt 18. Sep 2014, 09:42
Zitat:
Gibt es hierzu Informationen, warum man das so für IOS und Android gemacht hat (also mit S[0] als ersten Char anzufangen)?
Weil das is C so ist. Und die Kompatibilität zu C scheint wichtiger zu sein, als die Kompatibilität zu altem Delphicode.
Zitat:
Wo steht dann die Längeninformation? Oder gibts die nicht mehr?
Die gab es nur bei ShortString (=alter Stringtyp von Turbopascal), seit Delphi ist AnsiString der Standardtyp (Länge nicht auf 256 Zeichen/8 Bit beschränkt und keine feste Länge)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: AnsiString in Android App

  Alt 18. Sep 2014, 09:46
Angeblich um die nötige "aufwändige" Umrechnung wegzulassen, so einer Sage nach , denn aus der 1 wird ja intern ein 0-Offset im Char-Array.

In anderen Sprachen ist Char 0 auch das Erste.
Im Delphi stammt das davon, daß im ShortString an der 0 das Längenbyte stand und die LongStrings mit der Zählung gleich blieben, obwohl es das Längenbyte "dort" nicht mehr gibt.
Es ist somit wie in den anderen Sprachen und equivalent zu den dynamischen Arrays.


In der aktuellen OH wird der interne Aufbau der Typen ja inzwischen sehr ausführlich erklärt.

[add]
Alter StringType mit Längenbyte
und neuer Stringtyp mit Längeninteger, aber der liegt vor dem Pointer ... ab dem Pointer kommen gleich die Chars, damit es sich direkt in PChar casten lässt.

Siehe OH
http://docwiki.embarcadero.com/RADSt...e_Datenformate
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Sep 2014 um 09:50 Uhr)
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#4

AW: AnsiString in Android App

  Alt 18. Sep 2014, 09:48
Ok Danke. Habe mir auch grad die Seite mit den Datenformaten durchgelesen
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: AnsiString in Android App

  Alt 18. Sep 2014, 09:52
Bei den alten StringFunktionen muß man nun eben aufpassen, kann sich aber über Low und High auch dir "aktuellen" Indize besorgen.

Und die neuen String-Helper arbeiten immer mit dem 0-Index, auch unter Windows.

Delphi-Quellcode:
var
  S: string;

S.Chars(0) = S[Low(S)]
S.Trim = Trim(S)
S.substring(0, 2) = Copy(S, Low(S), 2)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.227 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: AnsiString in Android App

  Alt 18. Sep 2014, 10:38
Bei den alten StringFunktionen muß man nun eben aufpassen, kann sich aber über Low und High auch dir "aktuellen" Indize besorgen.

Und die neuen String-Helper arbeiten immer mit dem 0-Index, auch unter Windows.

Delphi-Quellcode:
var
  S: string;

S.Chars(0) = S[Low(S)]
S.Trim = Trim(S)
S.substring(0, 2) = Copy(S, Low(S), 2)
Am bestesn gleich auf diese Umstellen und Uraltkompatiblität mit Delphi 6/7 aufgeben.
Dann ist es auch einfacher Code von Java/.NET zu lesen und portieren zu können da dort das ja fast Identisch gemacht wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: AnsiString in Android App

  Alt 18. Sep 2014, 10:52
Wenn man es endlich mal hinbekommen könnte, daß man mehr als nur einen Helper benutzen kann, dann würde sich es bestimmt noch mehr verbreiten und würde viele Vorteile bringen, vorallem bei Ausnutzung der Autovervollsändigung.
z.B. "mal gucken was ich alles mit meinem String Typen machen kann"
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:47 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