Initialisierungsliste / Textdatei schreiben, binär lesen
-
Hallo,
ich (anfänger) kämpfe immer noch mit einem VC++ Programm herum und komme an folgenden Stellen nicht weiter:
1. Initialisierungsliste eines Constructors:
OutputWriter::OutputWriter(MemoryMap *flash, MemoryMap *eeprom, unsigned int pageSize, DataBuffer *key, DataBuffer& initialVector, DataBuffer& signature, bool updateLockBits, unsigned char lockBits, unsigned int memSize, int keyCount, bool createFlashCRC, bool eraseFlash, bool nonsenseRecords ) : pageSizeM(pageSize),Ich habe nur bis zum ersten Parameter pageSizeM den code gelistet. Es geht um das pageSizeM. Laut meinem Skript dient die Parameterliste dazu, Initialisierungswerte an Member-Objekten, oder Basisklassen durchzureichen.
Es gibt aber im gesamten Programm kein pageSizeM-Objekt.
Vielmehr ist pageSizeM eine Variable der Klasse Outputwriter mit der privat-Deklaration "unsigned int pageSizeM;"
Frage: Was bewirkt also der Aufruf "pageSizeM(pageSize)" in der Parameterliste???2. Textdatei schreiben, als Binärdatei lesen
Zunächst wird von einem Programm ein File erzeigt mit folgender Anweisung:
fprintf(outputFileM, "%s", frameBufferM.toHexString());Das erzeugte File kann man mit einem Texteditor öffnen und es werden auch nur ASCII-Zeichen von "0" ..."9" und "A" ... "F" angezeigt. keine sonderbaren anderen Zeichen. Es ist also ein Textfile.
Das zweite Programm greift auf die erzeugte Datei in folgender Form zu:
inFile = fopen(argv[0], "rb"); ... // Read the whole file into the buffer while(fscanf(inFile, "%2X", &buffer[bufferSize]) == 1) bufferSize++;Was ich nicht kapiere: Die Textdatei wird jetzt als BINÄR-Datei geöffnet und eingelesen!?!?! Wie funktioniert das? Das verstehe ich nicht.
Gruß
Wolfgang
-
1. Es wird damit der Konstruktor des pageSizeM-Objekts aufgerufen.
2. Ob Binär oder Text ist eine reine Interpretationssache, letztlich stehen dahinter immer nur Nullen und Einsen
.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
connan schrieb:
1. Es wird damit der Konstruktor des pageSizeM-Objekts aufgerufen.
2. Ob Binär oder Text ist eine reine Interpretationssache, letztlich stehen dahinter immer nur Nullen und Einsen
.zu 1.: das hätte ich ja auch erwartet, aber ich finde im ganzen Projekt keine pageSizeM-Objekt-Deklaration!!!
zu 2: So einfach ist es doch auch nicht
: Wenn das File als ASCII-Datei vorhanden ist, dann ist z.B. der Wert 255 dezimal als zwei "F""F"-ASCII-Zeichen abgelegt. Wenn ich die Datei dann als Binärdatei bei fopen angebe, dann lese ich den ASCII-Code als binären Wert ein und komme aber nie mehr auf 255 dezimal.Gruß
Wolfgang
-
Wolfgang Weinmann schrieb:
Vielmehr ist pageSizeM eine Variable der Klasse Outputwriter mit der privat-Deklaration "unsigned int pageSizeM;"
Frage: Was bewirkt also der Aufruf "pageSizeM(pageSize)" in der Parameterliste???Es initialisiert genau dieses 'unsigned int pageSizeM;' des Objektes, das mit dem Ctor-Aufruf erzeugt werden soll.
Was ich nicht kapiere: Die Textdatei wird jetzt als BINÄR-Datei geöffnet und eingelesen!?!?! Wie funktioniert das? Das verstehe ich nicht.
Der Unterschied zwischen "Textmodus" und "Binärmodus" ist lediglich eine Sonderbehandlung einige Zeichen (genauer: des \n) - wenn du die Datei im Textmodus geöffnet hast, wird das \n als \r\n geschrieben (zumindest unter Windows). Wie du die eigentlichen Daten interpretierst, hängt von der verwendeten Lesefunktion ab - fscanf() bzw. istream::op>> liest als Text fread() bzw. istream::read() liest binär.