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?
-
-
oh sorry, nicht gesehen.
Danke für die Antworten