Teil eines QByteArray in einen allozierten Speicher schreibn

Alles rund um die Programmierung mit Qt
Antworten
Zephyr
Beiträge: 31
Registriert: 17. Februar 2009 14:29

Teil eines QByteArray in einen allozierten Speicher schreibn

Beitrag von Zephyr »

Hi@all

Ich habe die Aufgabe ein in objective-C geschriebenes Programm zu C++/QT4 zu portieren.


Ich komm allerdings nicht weiter, wo es happert erklär ich am besten an einem Beispiel..


das QByteArray: data wird in einer funktion als parameter geliefert.

als erstes wird ein voidpointer erstellt:

void* tmp = (void*) malloc(größe);

nun kann ich über memmove(tmp,data.constData(),data.size())

das komplette ByteArray in den Speicher schreiben...

Das Problem ist dass ich nur einen bestimmten Bereich des Arrays in den Speicher schreiben soll ,weil der voidpointer später gecastet wird.


Vielleicht kennt jemand von euch eine Lösung ,ich freue mich über jede Hilfe.
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Das ist doch nicht schwer und prinzipiell hast du die Lösung doch bekommen. Also zuerst machst du sowas wie:

Code: Alles auswählen

QByteArrayn mybA;
//...
unsigend char *myData = new unsigend char //malloc ist c nimm new
memcpy(myData, mybA.constData() + startOffset, mybA.count() - startOffset);
mit startOffset kannste bestimmen wo du anfängst und wenn du auch nicht bis zum Ende möchtest bestimmste das halt noch weiter mit der Länge. Den byte pointer kannste auch ganz einfach in void casten.
Nimm außerdem constData, damit wird dann nicht noch zusätzlich Speicher alloziiert.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Vielleicht solltest noch ein bisser mehr erklaeren, was genau du machen willst. bzw warum nur ein teil des Arrays kopieren willst und was das dann mit den casten zu tun hat .

und noch paar fragen von unserer seite:
Du asbreitest mit c++, warum nen Array selber aufziehen ?
QByteArray kannst doch selber nutzen, zumal die QT abhaengigkeit eh scho hasst ?
falls ned QT willst, bleibt immer noch der std:vector, den man in erwaegung ziehen kann ....

QByteArray zu QBytearray zu konvertieren ist auch einfach.

zum beispiel ab dem 5. byte 5 bytes kopieren gaenge so ...

QByteArray newByteArray(data.constData() + 5, 5);

Ciao ...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

... oder gleich QByteArray::mid() benutzen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
CLRS530
Beiträge: 155
Registriert: 8. Oktober 2007 18:00

Beitrag von CLRS530 »

Ajo mid hatte ich eigentlich gesucht, aber irgendwie nicht gefunden 8) . Wenn er ein Projekt portieren soll ist es naatürlich auf gewisse Dinge angewiesen oder muss sie beibehalten.
Du solltest aber nicht versuchen das Ding Zeile um Zeile zu übersetzten, da machst dir alles viel zu kompliziert. Ich denke so lange das Programm das selbe macht wie zuvor genügt das doch völlig. Das heißt mid benutzten z.B. Ansonsten wird mit Qt alles nur komplizierter als ohne. Das kann euer Prof oder wer auch immer, sicherlich nicht wollen 8).

EDIT:
Ich habe gerade mal geguckt und würde trotz allem, wenn du es so machen MUSST, wie du sagst mit meiner Version anstelle von zur Hilfenahme von mid. Durch mid hast du genauso 2 Kopiervorgänge und wirklich viel vereinfachen tut es auch nicht. Wenn du QByteArray weiterbenutzen könntest wäre mid allerdings sinnvoller.
Antworten