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.


Anmelden zum Antworten