AGB  ·  Datenschutz  ·  Impressum  







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

Stream auslesen

Ein Thema von PASST · begonnen am 9. Feb 2006 · letzter Beitrag vom 10. Feb 2006
Antwort Antwort
Seite 2 von 2     12   
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Stream auslesen

  Alt 10. Feb 2006, 08:13
Ok und vielen Dank, ich habe es verstanden.

Ich versuch's mal in eigene Worte zu fassen.
LString := '123456'; Der Compiler weiß bevor er LString den String '123546' zuweist, dass der Text 6 Byte lang ist, und setzt SetLength(s, 6) automatisch vorher.
LBytes := AStream.Read(LString[1], 50); Read bedeutet, dass munter 50 Bytes in die Variable LString gelesen werden sollen und erst nachher festgestellt wird, wieviel Bytes tatsächlich gelesen wurden. Ergo hat der Compiler gar nicht die Möglichkeit im Vorhinein SetLength aufzurufen.

Noch eine letzte Frage. Was bedeutet [1] bei LString[1] genau?
Meine Vermutung ist, da wir die ganze Zeit von Speicheradressierung sprechen, dass hiermit die erste Speicheradresse, die für LString reserviert wurde, gemeint ist. Wenn ich also LString[10] schreibe, würde in den ersten 9 Bytes der für LString reservierten Speicheradressen ein zufälliger Inhalt stehen. Richtig?

Aga aga aga, einen habe ich noch:
Delphi-Quellcode:
Integer(Buffer) := 5;
Pinteger(@Buffer)^:= 5;
Beides ist mir unbekannt und kann ich so über die Hilfe auch nicht nachvollziehen. Wann darf ich sowas überhaupt anwenden?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Stream auslesen

  Alt 10. Feb 2006, 20:21
Moin PASST,

Zitat von PASST:
Noch eine letzte Frage. Was bedeutet [1] bei LString[1] genau?
Zitat von PASST:
Meine Vermutung ist, da wir die ganze Zeit von Speicheradressierung sprechen, dass hiermit die erste Speicheradresse, die für LString reserviert wurde, gemeint ist. Wenn ich also LString[10] schreibe, würde in den ersten 9 Bytes der für LString reservierten Speicheradressen ein zufälliger Inhalt stehen. Richtig?
Zitat von PASST:
Ok und vielen Dank, ich habe es verstanden.
Sieht so aus, denn Deine Vermutung trifft's genau.
Du musst dann halt nur berücksichtigen, dass Du, um im obigen Beispiel zu bleiben, auch nur noch 41 Byte lesen darfst, statt 50.

[EDIT]
Wobei noch anzumerken wäre, dass der Compiler intern einen String immer mit #0 abschliesst, also ein Byte mehr belegt, als length zurückliefert, damit man diese an C-Funktionen (die i.d.R. Nullterminierte Strings verwenden) übergeben kann, ohne sich um die abschliessende #0 kümmern zu müssen. Das ist dann speziell bei Aufrufen von Funktionen der Windows-API wichtig.
[/EDIT]
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
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 20:35 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