in QBitArray umwandeln

Alles rund um die Programmierung mit Qt
Antworten
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

in QBitArray umwandeln

Beitrag von Troll.Soft »

hallo,
kennt jemand eine Möglichkeit einen Qt-Typ in ein QBitArray umzuwandeln oder muß ich das selbst basteln. QVariant kann es nicht.
tschüß
Troll.Soft
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Welchen Qt-Typ? Und ein toBitArray bei QVariant gibt es.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

upsala hat geschrieben:Welchen Qt-Typ?
in erster Linie QString
Und ein toBitArray bei QVariant gibt es.
und was ist das????

Code: Alles auswählen

QBitArray QVariant::toBitArray () const
Returns the variant as a QBitArray if the variant has type() BitArray; otherwise returns an empty bit array.
See also canConvert() and convert().
mit QVariant kann man also nicht konvertieren.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und wie soll bitteschön eine Konvertierung von einem QString zu einem QBitArray aussehen?
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

upsala hat geschrieben:Und wie soll bitteschön eine Konvertierung von einem QString zu einem QBitArray aussehen?
Am Besten richtig.
Alle Objecte im Speicher haben nun mal ein definiertes Bitmuster, das man folglicherweise auch in einem BitArray darstellen kann. Soll heißen man kann legal und sinnvoll alle Typen als Bitmuster darstellen.
In diesem Fall liefert eine fremde dll mir Daten (als QVariant) und den Typ der Daten (die nicht immer mit QVariantTypen korrespondieren, dann wird der nächst beste Typ genommen). Die dll liefert ein Bitfeld und QVariant meldet einen String. Offensichtlich ein Fehler in dieser dll. Schaue ich mir das Binärmuster der Buchstaben an, stellt sich heraus das das korrekte Binärmuster angekommen ist.
Nun kann ich das mit C Mitteln (Union) selber umwandeln, eine Qt-Methode wäre mir lieber.
tschüß
Troll.Soft
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

eine Qt-Methode wäre mir lieber.
Naja, Qt iss nen Framework fuer c++.
Das heisst, es erweitert den umfang, und nicht, es reimplementiert alles neu. Also fuer spezielle Anwendungsfaelle wirst wohl doch auf C++ oder sogar C zurueckgreifen muessen.

Die dll liefert ein Bitfeld und QVariant meldet einen String.
WIe genau sieht der "String" aus, davon iss natuerlich die konvertierung abhaengig ! Also steht da sowas wie "01101010101" drin ?

wie idendifizierst du das es ein bitfeld ist ?
Weisst du das anhand anderer parameter oder der Logic ? oder kommen strings als Rueckgabewert ned vor ?
Sowas wuerd mir viel mehr Sorgen machen.

Ciao ...
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

so, habe in der Zwischenzeit mein eigenes toBitArray() mit C-Bordmitteln geschrieben.
Funktioniert.
Trotzdem noch ein Desaster. Der fälschlicherweise gelieferte String enthält nur im ersten Byte das gerantiert richtige Bitmuster.
Hoffentlich korrigiert Nokia diesen Fehler bald.
tschüß
Troll.Soft
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Troll.Soft hat geschrieben: Der fälschlicherweise gelieferte String enthält nur im ersten Byte das gerantiert richtige Bitmuster.
Hoffentlich korrigiert Nokia diesen Fehler bald.
Häh? Ich kapier nichts - Du hast noch nicht ein Beispiel gebracht was denn jetzt falsch läuft...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

Christian81 hat geschrieben:Häh? Ich kapier nichts - Du hast noch nicht ein Beispiel gebracht was denn jetzt falsch läuft...
Und ich dachte, ich sei ausführlich gewesen seufz.

Also:
die Dll liefert zwei Werte. Ein QVariant und ein enum mit dem Typ. Die Typen entsprechen nicht ganz den C++ Qt Typen.
1) Wenn Type == Integer mit ein Byte Länge komme ich mit Variant.toInt() an den Wert.
2) Wenn Type == String komme ich mit Variant.toString() an den Wert. usw.
...
n) Wenn Type == Bitfeld erwarte ich mit Variant.toBitField() den Wert. Allein das klappt nicht, denn im Variant steht ein String. Wohl ein Fehler der Dll.

Gebe ich ein Bitfeld mit 8 Bit in die Dll ein, liefert mir die Dll einen String der Länge 1. Betrachte ich dieses eine Zeichen als Byte (Asccii) und schaue mir den Binärwert an (also die 8 Nullen und Einsen aus denen ein Byte besteht) ist das exakt das Bitfeld was in die Dll eingegeben wurde.
uff
:)
tschüß
Troll.Soft
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Laß erst mal die DLL reparieren bevor du hier weiter mit irgendwelchen Vermutungen weiterarbeitest.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

upsala hat geschrieben:Laß erst mal die DLL reparieren bevor du hier weiter mit irgendwelchen Vermutungen weiterarbeitest.
wird erledigt. Der Fehler tritt zum Glück nur selten auf und ich kann mit Warnhinweisen auf die in naher Zukunft (oder ferner) reparierte Dll verweisen.
Antworten