Frage zu QIODevice::getChar()

Alles rund um die Programmierung mit Qt
Antworten
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Frage zu QIODevice::getChar()

Beitrag von TK »

Hallo zusammen,

A)
ich möchte eine Binärdatei zeichenweise auslesen.
Ein Zeichen sieht z.B. so aus: ÿ = 0xFF = 255
Jetzt hat aber getChar als Übergabeparameter nur char, sprich einen Wertebereich von -127 ... 127.
Mit dem folgenden workaround funktioniert das:

Code: Alles auswählen

    unsigned char x;
    char buf[1];
    
    x = 0;
    buf[0] = 0;

    InputFile->getChar(buf);
    x = (unsigned char)buf[0];
Geht das besser oder einfacher? Gibt es eine andere Funktion aus QIODevice die besser geeignet ist?

B)
Wenn ich nun x über QTextStream out(OutputFile) in eine andere Datei schreibe, steht da nun 255. Ich brauche aber wieder das Zeichen ÿ.
Muss ich nun über QDataStream binär schreiben?

C)
Ah, und noch eine Fage. Habe es eben mit QDataStream ausprobiert und das Zeichen steht nun in der Datei. Doch wie geht es, dass ich z.B. an Zeile xzy schreiben kann, da in den ersten Paar Zeilen schon etwas steht

Danke für Tipps und Hinweise 8)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

a) es geht nicht besser
b) mit QTextStream gar nicht - sonst würde es wohl nicht QTextstream heissen. Du suchst ganz einfach QIODevice::write()
c) Siehe QIODevice::seek()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Beitrag von TK »

b)
mit:

Code: Alles auswählen

    char buf[1];
    buf[0] = 0;

    InputFile->getChar(buf);
    x = (unsigned char)buf[0];
    
    OutputFile->write(&buf[0]);
bekomme ich nicht das Zeichen ÿ, sondern ÿa0j´"

Was ist das schiefgegangen? Was soll das Zeugs hinter ÿ ? Wie bekomme ich das weg?


c)
Ja, habe ich jetzt auch gefunden. Jetzt ist es aber so, dass ich zuerst einen Header in die Datei schreibe, der aus beliebigen Zeilen bestehen kann. Mit Seek kann ich nur eine absolute Position angeben. Kann ich die Position auch relativ angeben? Oder gibt es eine Funktion, die die Position der letzten Zeile zurück gibt?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

b) Falsch ist nur dass Du die Doku nicht gelesen hast -> http://doc.trolltech.com/4.5/qiodevice.html#write-2
c) Doku lesen bildet auch hier -> http://doc.trolltech.com/4.5/qiodevice.html#pos
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Beitrag von TK »

c)
Mit seek kann ich die Position ja nur horizontal verschieben.

Code: Alles auswählen

    qint64 value;
    OutputFile->seek(100);
    value = OutputFile->pos();
value = 100, logisch. Das bringt mich aber auch nicht weiter...

Kann man auch die Position vertikal verschieben, also in die x-te Zeile eben?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn Du zeilenorientiert arbeiten willst musst Du alles einlesen und dann nach \n splitten. Anders, also direkt mit QIODevice geht sowas nicht. Dafür ist QIODevice zu Low-Level ausgelegt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TK
Beiträge: 74
Registriert: 3. April 2009 11:33

Beitrag von TK »

Ok, ich probiere mal was aus...
Antworten