speichern von DWORD -> BYTE*, ...



  • Hi zusammen,

    folgendes Problem: Wie speichere ich den Inhalt eines DWORD( und WORD ) in einen Bytepuffer? Und lese ihn auch wieder zurück?

    folgendes:

    es geht darum, Daten binär zu speichern. z. B. sowas:

    char* outBuffer;
    ...
    WORD __fastcall SaveToBuff( BYTE* buff, AnsiString txt, WORD w )
    {
      int i;
      for (i = 1; i <= txt.Length(); i++)
      {
        (*buff) = aIdx[i];
        buff++;
      }// soweit noch alles klar, aber ...
      //... wie packe ich jetzt das WORD da rein?
      ???
    }
    Aufruf mit:
      WORD len = SaveToBuff( outBuffer, "hallo", 288 ); // werden Variablen
    

    übergeben, nur zwecks Einfachheit

    das ganze dann auch noch mit DWORD statt WORD?!

    Hab schon Google und SuFu bemüht, aber 😞

    thx schonmal

    grüssle 🙂



  • Hallo

    So ganz versteh ich den Sinn nicht, aber technisch sieht das z.B. so aus :

    int bytes = sizeof(w)
    BYTE* wb = reinterpret_cast<BYTE*>(&w);
    for (int lv = 0; lv < bytes; lv++)
    {
      (*buff) = *wb;
        buff++;
        wb++
    }
    

    w kann nun ein beliebiger Plain Old Datatype sein.
    Die Schleife kannst du grundsätzlich auch mit einem memcopy ersetzen, ebenso wie beim kopieren des Strings.

    bis bald
    akari



  • thx akari,

    habs jetzt mal so, und mit memcpy versucht. Nur verifizieren kann ichs leider nicht, da es am lesen scheitert.

    ...
    BYTE* inBuffer;
    DWORD* in;
    ...

    for( int i = 0; i < 4; i++ )
    {
    aus dem BYTE* dann wieder das DWORD lesen???
    }

    Datenverwaltung hiess bei mir bis jetzt eigentlich alles vom Textfile bis zu Oracle, das ist Neuland für mich( hat zwar nichts mit der Konvertierung zu tun, aber jetzt werde ich quasi erstmalig dazu gezwungen. Davor konnte ich es umgehen ).

    grüssle 🙂



  • Hallo

    Da brauchst du keine Schleife oder memcopy

    Word w; // Ziel
    BYTE* inBuffer; // Ursprung
    Word* buf; // Zwischenspeicher
    
    buf = reinterpret_cast<Word*>(inBuffer);
    w = *buf;
    inBuffer += sizeof(w);
    

    Auch hier kann nun w von einem beliebigen POD-Datentype sein.

    bis bald
    akari



  • Geht´s dir darum, verschiedene Datentypen in´s RAM zu serialisieren? Dazu könntest du auch TMemoryStream oder std::vector<char> benutzen.


Anmelden zum Antworten