AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi frage zu strings+Char

frage zu strings+Char

Ein Thema von iLLe · begonnen am 2. Aug 2003 · letzter Beitrag vom 3. Aug 2003
Antwort Antwort
Seite 2 von 2     12
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: frage zu strings+Char

  Alt 2. Aug 2003, 17:43
Zitat von Christian Seehase:
nein, denn der Inhalt beginnt ja bei Offset 0, so dass s+0 = Adresse des ersten Zeichens des Inhaltes.
Du hast hier offensichtlich die Indizes und die Offsets verwechselt
Ich glaub, ich stehe etwas auf dem Schlauch, aber was ist in diesem Fall ein Offset und was ein Index?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: frage zu strings+Char

  Alt 2. Aug 2003, 18:29
Moin Chewie,

angenommen sHuge sei eine Variable vom Typ string, dann können die einzelnen Zeichen über den Index erreicht werden, wobei der Index von 1 bis length(sHuge) reicht.
sHuge enthält die Adresse des ersten Zeichens des Inhaltes, also wäre der Offset des ersten Zeichens, relativ zur Adresse des ersten Zeichens gleich 0.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#13

Re: frage zu strings+Char

  Alt 2. Aug 2003, 19:20
Zitat von Christian Seehase:
Moin Chewie,

nein, denn der Inhalt beginnt ja bei Offset 0, so dass s+0 = Adresse des ersten Zeichens des Inhaltes.
Du hast hier offensichtlich die Indizes und die Offsets verwechselt

@Duffy:
Ich wollte eigentlich darauf hinaus, dass Delphi bei HugeStrings eben nicht "nach guter alter Manier" ein Längenbyte verwendet.
Das gilt nur für die ShortStrings.

Das folgende kann man mit einem HugeString gar nicht machen,

Delphi-Quellcode:
var
  sShort : string[10];

begin
  sShort := '01234';
  ShowMessage(IntToStr(ord(sShort[0])));
end;
da der Compiler das schon nicht zulässt.


Bei HugeStrings müsste man das so machen:

Delphi-Quellcode:
var
  sHuge : string;

begin
  sHuge := '01234';
  ShowMessage(IntToStr(PInteger(PChar(sHuge)-4)^));
end;
um direkt an den Längenzähler heranzukommen.

Das wiederum liesse sich bei ShortStrings so ähnlich machen

Delphi-Quellcode:
var
  sShort : string[10];

begin
  sShort := '01234';
  ShowMessage(IntToStr(PByte(PChar(@sShort))^));
end;
was bedeutet -4? habs mal durch -5 oder -3 ersetzt da kommen ja 341234523 zahlen raus
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#14

Re: frage zu strings+Char

  Alt 2. Aug 2003, 21:53
Hallo Christian Seehase,
MyString[1] ist bei einem Short String und einem Huge String ein und dasselbe Zeichen. Das ist eben so, egal ob mit einem Längenbyte oder mit 4.
bye
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: frage zu strings+Char

  Alt 3. Aug 2003, 00:10
Moin Zusammen,

@Silent:
Bei einem HugeString befindet sich auf den Bytes -8 bis -5 der Referenzzähler, und auf -4 bis -1 das Längenfeld des Strings (Werte relativ zu der Adresse in sHuge)
Deshalb -4, da dann auf das niederwertigste Byte des Längenfeldes adressiert wird.

Offsets relativ zu der Adresse in sHuge:
(Wert darunter in Hex, bezogen auf das Beispiel)

Code:
Referenzz. |Länge       | Inhalt
-8 -7 -6 -5 | -4 -3 -2 -1 |  0  1  2  3  4  5  6
FF FF FF FF | 05 00 00 00 | 30 31 32 33 34 35 00
Hier hat der Referenzzähler den Wert -1, da sHuge direkt eine Stringkonstante zugewiesen wurde (sHuge := '01234'). Diese haben immer den Referenzzähler -1, da sie ihren Wert nicht verändern.
Wichtig ist hierbei noch, dass die bei Intel übliche Speicherreihenfolge Verwendung findet, also das niederwertigste Byte zuerst, das höchstwertigst zuletzt. Deshalb steht die 5 auf Offset -4.
Würdest Du also bei meinem Beispiel -5 statt -4 schreiben, müsste als Ergebnis 1535 (dezimal) herauskommen.

Code:
-5 -4 -3 -2
FF 05 00 00 => 000005FF Hex => 1535 Dez
und bei -3

Code:
-3 -2 -1  0
00 00 00 30 => 30000000 Hex => 805306368 Dez
@Duffy:
Das ist natürlich richtig, aber ich finde, dass es nicht schaden kann mal auf die Unterschiede der Stringtypen einzugehen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#16

Re: frage zu strings+Char

  Alt 3. Aug 2003, 00:12
Hallo Christian Seehase,
schaden kann es auf keinen Fall ...
bye
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#17

Re: frage zu strings+Char

  Alt 3. Aug 2003, 02:02
danke für die ausführliche erklärung chris
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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