QBitArray mit QDataStream

Alles rund um die Programmierung mit Qt
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

QBitArray mit QDataStream

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Eventuelle haste in deinem Datenstrom kein QBitArray
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Das kann doch nicht sein, bei ByteArray gehts ja auch?

Naja, gut, also muss ich hier einfach eine bessere Lösung finden.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Und wie ließt du mit QFile Bits? Vorallem bei einer Datei, die sowohl BigEndian als auch LittleEndian in einer Datei nutzt?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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!?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Dann hattest du bisher glück gehabt. Kann sein das Qt bei einem QByteArray keine eigenen Daten einfügt.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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"
Archimedes
Beiträge: 3
Registriert: 24. August 2006 10:54

Re: QBitArray mit QDataStream

Beitrag 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.
Antworten