Seite 1 von 2

QBitArray mit QDataStream

Verfasst: 27. August 2006 03:57
von FlorianBecker
Hi,

ich weiß nicht, ob ich dafür zu doof bin, aber irgendwie bekomme ich das hier nicht auf die Reihe:

Code: Alles auswählen

    QBitArray frameSize( 5 );
    stream >> frameSize;
    qDebug() << "size" << frameSize.count();
So, ja, und seltsamer Weise ist frameSize leer und size() ist null.

Vielleicht weiß jemand, was da nicht so ganz läuft.

Verfasst: 27. August 2006 10:07
von BartSimpson
Eventuelle haste in deinem Datenstrom kein QBitArray

Verfasst: 27. August 2006 18:03
von FlorianBecker
Ich dachte, das Ding ist dafür da, das man Bits ausließt? Ja, es ist mit Sicherheit kein QBitarray. Naja, also anders auslesen.

Verfasst: 27. August 2006 18:24
von BartSimpson
Da musste denn warscheinlich mit readRawData aus dem Strom lesen, und das einem QBitArray übergeben. Denn mit QDataStream kannst nur aus Dateien lesen, die du mit Qt erstellt hast.

Verfasst: 27. August 2006 18:37
von FlorianBecker
Das kann doch nicht sein, bei ByteArray gehts ja auch?

Naja, gut, also muss ich hier einfach eine bessere Lösung finden.

Verfasst: 27. August 2006 18:47
von BartSimpson
Du kannst nur aus dem Strom lesen, was du auch reingesteckt hast.
Wenn du eine Binärdaten lesen willste, währe QFile besser geeigent.

Verfasst: 27. August 2006 19:51
von FlorianBecker
Und wie ließt du mit QFile Bits? Vorallem bei einer Datei, die sowohl BigEndian als auch LittleEndian in einer Datei nutzt?

Verfasst: 27. August 2006 20:00
von BartSimpson
Da must du denn genau den Aufbau kennt. Du kannst keine Binärdateien lesen, wenn du den Aufbau nicht kennst. QDataStream ist für Dateien gedacht, du mit QDatastream gespeichert hast.

Verfasst: 27. August 2006 20:03
von FlorianBecker
Also ich kenne den Aufbau, verstehe deine Argumentation leider nicht, wieso der QIODevice besser sein sollte als QDataStream, egal ob mit oder ohne Qt!?

Verfasst: 28. August 2006 10:09
von BartSimpson
QDatastream kannst nur wirklich benutzten, wenn du die Daten auch damit reingeschrieben hast. Wenn du binärdaten sagen wir mal ein Bild laden willst, muste IODevice nehmen. Denn laut Doku von DataStream schreib das Teil eine Versionsnummer in den Strom:( Also schätze ich mal versucht DataStream auch diese wieder zu lesen.

Verfasst: 28. August 2006 16:56
von FlorianBecker
Also ich habe keine Ahnung, was du meinst.

Ich lese alle meine Dateien immer mit QDataStream und ich habe die niemals selbst erzeugt. Es klappt hervorragend.

Es geht einfach alles damit, nur eben der QBitArray funktioniert nicht, wie ich mir das vorgestellt habe.

Verfasst: 28. August 2006 18:05
von BartSimpson
Dann hattest du bisher glück gehabt. Kann sein das Qt bei einem QByteArray keine eigenen Daten einfügt.

Verfasst: 28. August 2006 18:28
von FlorianBecker
Ja, auch sonst werden keine eigenen Qt Daten eingefügt. Nur BitArray geht nicht. Und ich habe noch eine andere Frage, wie ließt du denn Dateien aus, wenn du eine BigEndian Datei hast und du dich auf einem LittleEndian System befindest?

Entschuldige, aber mir fehlt da wirklich die absolute Erklärung momentan. Vielleicht schreibst du mir einmal, was genau wie wo gehen sollte.

Verfasst: 28. August 2006 18:52
von BartSimpson
Im QDatastrem steht eine Markierung.
Sonst muste die Bytes/Bits drehen:(
Nur muste halt genau wissen, wie die Reihenfolge ist.
Und genau das nimmst dir QDatastream ab. Aber funktionieren tut das nur, wenn das die Daten auch mit QDatastrem geschrieben worden sind. Dann kannst die Daten überall lesen egal ob kleiner oder großer "Idianer"

Re: QBitArray mit QDataStream

Verfasst: 29. August 2006 10:09
von Archimedes
FlorianBecker hat geschrieben:

Code: Alles auswählen

    QBitArray frameSize( 5 );
    stream >> frameSize;
    qDebug() << "size" << frameSize.count();
So, ja, und seltsamer Weise ist frameSize leer und size() ist null.

Vielleicht weiß jemand, was da nicht so ganz läuft.
Ich glaube dass das Problem ist das QDataStream ein 8 bit alignment hat.
Probiere mal mit 8 bits.