void Pointer um bestimmte Größe verschieben?



  • Hallo,

    ich habe einen void Pointer, der auf einen bestimmten Speicherbereich
    zeigt, und möchte nun diesen Pointer um eine vorher nicht direkt festgelegte
    Größe, vielleicht 4 oder 8 Byte, verschieben. Die Größe ist in einer
    Variable gespeichert, also ungefähr so:

    // void* pPtr ist vorher bereits definiert worden
    UINT uSize = 4;
    void* pNewPtr = pPtr + uSize;
    

    Allgemein ist das leider nur möglich, wenn ich den Pointer direkt
    als z.B. char* deklariere, da der Compiler dann weiß, um wieviele Bytes er
    verschieben soll, aber void hat ja keine direkt bekannte Größe, daher
    kriege ich von meinem Compiler ne Fehlermeldung.
    Gitb es da ne Möglichkeit?
    Vielen Dank
    Norman.



  • Caste einfach pPtr nach char* (oder was auch immer du als "Einheit" benutzt).

    UINT uSize = 4;
    void* pNewPtr = static_cast<char*> (pPtr) + uSize; // pNewPtr ist uSize Bytes hinter pPtr.
    


  • das Problem ist, dass ich nicht weiß, auf welchen Datentyp ich den
    Pointer casten muss, da es allgemein gehalten sein soll. Ich übergebe
    einfach einer Funktion einen Pointer und eine Größe, und diese Funktion
    soll mir einen Pointer zurück liefern, der um die Größe verschoben ist...



  • char ist immer genau ein byte groß. wenn du also tatsächlich immer um N bytes verschieben willst und nicht um N [größe des typs], dann liefert casten nach char was du willst.

    allerdings ist das nicht grad empfehlenswert, wenn du nicht absolut sicher bist, was du da machst ^^



  • AFAIK muss ein char-Pointer den gesamten Speicher lückenlos durchlaufen können. Außerdem ist sizeof (char) immer 1, char ist also die kleinste addressierbare Speichereinheit. Allgemeiner gehts nicht.
    Du kannst dir allerdings nicht sicher sein, ob ein char tatsächlich aus 8 Bit besteht!



  • ahso, ok das ist genau was ich brauche. Ich caste einfach den Pointer
    nach char.
    Aber warum kann es dabei Probleme geben, wie kann es sein, dass char
    nicht 8 bit groß ist?



  • Hallo

    Das Thema 1Byte != 8 Bit hatten wir erst vor kurzem hier.

    bis bald
    akari



  • oh sorry, nicht gesehen.
    Danke für die Antworten


Anmelden zum Antworten