AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Problem mit TFileStream und Write Read
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TFileStream und Write Read

Ein Thema von NickelM · begonnen am 8. Jul 2008 · letzter Beitrag vom 8. Jul 2008
 
Christian Seehase
(Co-Admin)

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

Re: Problem mit TFileStream und Write Read

  Alt 8. Jul 2008, 18:50
Moin Christian,

nein, wenn Du den Index weglässt, wird der Pointer geschrieben, den die StringVariable enthält, sowie eben alles, was zufällig dahinter im Speicher steht.

Beispiel

Delphi-Quellcode:
// Länge meint hier den Wert, den SizeOf zurückliefern würde
var // Adresse: Länge: Inhalt
  s : string; // 4712 4 Unbekannt
  w : word; // 4716 2 Unbekannt
                // 4718 2 Unbekannt (nicht genutzt, weil, i.d.R. Alignment 4)
  i : integer; // 4720 4 Unbekannt


begin
  s := 'TESTWERT'; // Adresse: 4712 / Länge: 4 Inhalt: $401F0000 (8000 dezimal)
                    // Adresse: 7992 / Länge: 4 Inhalt: $01000000 (Referenzzähler, 1 dezimal)
                    // Adresse: 7996 / Länge: 4 Inhalt: $08000000 (Länge des Strings, 8 dezimal)
                    // damit ein String in C-Funktionen direkt genutzt werden kann, legt
                    // der Compiler automatisch eine binäre 0 als Endekennung dahinter
                    // Adresse: 8000 / Länge: 4 Inhalt: TESTWERT#00
  w := 50; // Adresse: 4716 / Länge: 2 Inhalt: $3200 (50 dezimal)
                    // Adresse: 4718 / Länge: 2 Inhalt: unbekannt
  i := 1000; // Adresse: 4720 / Länge: 4 Inhalt: $E8030000 (1000 dezimal)

// Wenn man jetzt
fs.Write(s,Length(s));
// schreiben würde, würde in der Datei folgendes stehen (Hexadezimal)
// Annahme: Die Variablen würden so im Speicher stehen, wie oben
// angegeben, was aber nicht der Fall sein muss.
// Diese Annahme dient hier nur der Verdeutlichung.
//
// 401F00003200????
// Es werden also die Adresse des Strings, sowie der Wert von w in die Datei geschrieben.
// Der Wert der verbleibenden zwei Bytes ist unbekannt

// Bei
fs.Write(i,SizeOf(i));
// wird E8030000 in der Datei stehen, bei
fs.Write(w,SizeOf(w));
// ist es dann 3200.
end;
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
 


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 02:02 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