Buffer iterativ erweitern



  • Hallo zusammen,

    Ich habe folgendes Problem:
    Ich bekomme über eine Callback Funktion nacheinander Teile eines Jpeg's geliefert. Diese Teile möchte ich quasi nach einander in einen BYTE Buffer schreiben.
    Den Buffer initialisiere ich mit der Größe des Bildes, die mir vorab schon bekannt ist. Wie kann ich jetzt in weiterer Folge die Chunks des Bildes meinem Buffer hinzufügen?
    Meinen Input bekomme ich als void* ... zur Info.

    Im Voraus vielen Dank für die Hilfe!

    lg

    nac_



  • Was hindert Dich daran einen BYTE Pointer mit der Anfangsadresse des Buffers zu initialisieren, diesen dann als Startadresse für das Kopieren der Daten zu benutzen und anschliessend um die Grösse des Chunks zu erhöhen?



  • Im Wesentlichen das Wissen wie es geht. Ich weiss nicht wie ich einem Buffer, der zB schon einen Teil des Bildes beinhaltet, einen weiteren Teil hinzufüge. Gibt es hierfür eine read/write Operation? 😕



  • Ich gehe mal davon aus, Du allokierst den Speicher mit "malloc".
    Dann kannst den den Bereich einfach vergrößern/verkleinern durch "realloc".



  • Danke für eure Hilfe, aber ich habe mich wohl unklar ausgedrückt. Eigentlich ist die Allokation des Speichers nicht mein Problem - den kann ich auch mit "new" gleich auf die endgültige Größe initialisieren. (Aber durch realloc kann ich hier sicher die Performace verbessern!)

    Mein Problem ist eigtl. total simpel: Wie kann ich Daten die als void* kommen, meinem BYTE* Buffer hinten anhängen?

    + Operator geht nicht und write Operation in dem Sinne finde ich keine.

    Also bitte zeigt mir den Wald, ich seh nämlich nur Bäume! 😉



  • memcpy !?



  • Danke für den Hinweis, aber memcpy hängt die Daten nicht hinten an, sondern überschreibt die alten Daten di bereits im Buffer liegen oder?

    Ich habe folgenden Code testweise geschrieben, aber leider funktioniert es nicht. Vielleicht kann mir jemand auf die Sprünge helfen.

    int fillBuffer(void* input, int length)
    {
       int size = 4096;
       //Buffer die gesamten Daten hält
       BYTE* buffer = (BYTE*) new BYTE[size];
       if(size < length)
          return 0;
       memmove_s((void*)buffer, size, (void*)input, length); //Daten hinten anhängen
       return 1;
    }
    

    Danke für die Hilfe!

    lg,
    nac_


  • Mod

    memcpy hängt keine Daten an, sondern kopiert Daten von einer Speicherstelle, auf eine Speicherstelle. Wenn Du also die Zieladresse "günstig" wählst, hat dies den Effekt, das Daten angehängt werden...


Anmelden zum Antworten