Frage zur Arbeit mit Streams.
-
Hi,
ich hab ein kleines script gecodet das wie folgt aussieht:
int i; ifstream file("test3.txt", ios::binary); if(!file) { ShowMessage("Fehler bei open"); } else { Memo1->Lines->Add("Datei wird geöffnet ..."); } /* Stream Beispiel: ---------------- |0|1|2|3|4|5|.... Beim öffnen eines Streams befindet sich der Zähler am Anfang der Datei (in dem Fall Stream 0). Nach jedem Lesevorgang wird er um eine Position verschoben (Stream ++). Der Befehl, file.read(Buffer, Size); file.read(char*)&i,sizeof(i)); bedeutet soviel wie lese denn aktuellen Stream mit der Größe von sizeof(int) [4 Byte] und wandle denn Inhalt (&i) in einen Chartyp (char*) um. i hat nun denn Inhalt des aktuellen Streamzeichens. */ file.read((char*)&i,sizeof(i)); while(file) // solange kein Fehler (im Falle EOFn ist file == false) { Memo1->Lines->Add(i); file.read((char*)&i,sizeof(i)); } if(!file.eof()) { ShowMessage("Fehler beim lesen des Streams"); } else { Memo1->Lines->Add("EOF erreicht. Datei wird geschlossen ..."); file.close(); }Inhalt "test3.txt"
1234567890Ausgabe Memo1:
Datei wird geöffnet ... 875770417 943142453 EOF erreicht. Datei wird geschlossen ...Fragen:
1.) Kann mir nun mal jemand sagen was das für Zahlen sind und wie die zusammenkommen ?
2.) Kann mir jemand
(char*)&ierklären ?
Danke
Gruß
Binary
-
Schau mal hier:
http://www.c-plusplus.net/forum/viewtopic.php?t=39469
(char*)&i
bedeutet: Die Adresse von i (hart) gecastet auf einen Zeiger vom Typ char
-
ok, ich les mir denn artikel mal durch.
kannst du mir auch sagen was der inhalt von i der oben ausgegeben wird zu bedeuten hat ?
-
Da ich nicht weiß was Memo1 ist und was Add() erwartet kann ich Dir da keine Antwort geben
-
file.read((char*)&i,sizeof(i)); while(file) // solange kein Fehler (im Falle EOFn ist file == false) { Memo1->Lines->Add(i); file.read((char*)&i,sizeof(i)); }inhalt der datei ist "1234567890" ...
-
Wenn du, 123456789 in der Datei stehen hast, und dann
dies Binär einliest, dann liest du in ein int(4Byte)
jeweils 4 zeichen, d.h. du liest beim ersten mal
nicht 1 sondern 1234 aus, welches dann binär in das int
gehauen wird. Beim zweitenmal liest du wieder 4 Byte usw.
Wenn du die Zahlen 1 -9 haben willst, solltest du gleich mit
einem char auslesen, und das dann nach int casten.Devil
-
Frage schrieb:
Da ich nicht weiß was Memo1 ist und was Add() erwartet kann ich Dir da keine Antwort geben
Antwort schrieb:
file.read((char*)&i,sizeof(i)); while(file) // solange kein Fehler (im Falle EOFn ist file == false) { Memo1->Lines->Add(i); file.read((char*)&i,sizeof(i)); }inhalt der datei ist "1234567890" ...
:???: