Wie kann man die Speicherposition in einem Zeiger um ein bzw. zwei BYTE erhöhen



  • Hallo,

    ich habe einen Pointer zu einer Speicheraddresse, sagen wir *MemoryPosition.

    Nun möchte ich die Werte die dort nacheinander abgelegt sind auslesen. Dazu muss ich doch die Adressen um die Größe des entsprechenden Datentyps erhöhen. Nehmen wir an, dann an *MemoryPositions Daten mit zwei BYTE Länge abgelegt sind.

    Kann mir bitte jemand sagen, wie ich den Speicherbereich durchschreiten kann oder in anderen Worten den Zeiger zu *MemoryPosition um zwei BYTE erhöhe um den nächsten Wert zu holen?

    Vielen Dank,
    Frodo



  • Stichwort Zeigerarithmetik



  • ser1al schrieb:

    Edit1->Text = IntToStr((test[0])+1);  //damit greifst auf test[1] zu
    

    Falsch, damit greifst du auf test[0] zu und addierst 1 zu dessen Inhalt (probier's mal aus, indem du andere Werte vorher einträgst).

    @Frodo: Der Compiler weiß selber am besten, wie groß deine Daten sind - deshalb schiebt der Ausdruck "++p;" den Zeiger immer um die richtige Strecke weiter, egal ob p nun auf einen char, int oder my_special_class zeigt.
    (das klappt natürlich nur solange, wie du den Pointer nicht wild in andere Typen umcastest).



  • richtig, war ein kleiner fehler von mir!

    das meinte ich eigentlich:

    int array[7];
    *array = 5;        //erstes element
    *(array+1)=7;   //auf ein element weiter
    


  • Naja, nicht ganz meine Problematik.

    unsigned char *pDataBuffer; // Das ist die Definition von pDataBuffer

    *pDataBuffer // Das ist der Zeiger zum Start eines
    // Addressbereiches

    In diesem Bereich (ab *pDataBuffer) sind zwei-Byte lange Datenwerte angeordnet.
    Nun will ich diese nacheinander auslesen. Wie mache ich die zwei-Byte langen Schritte und wie geht die Zuweisung in Variablen.



  • data_t* typedbuffer=pDataBuffer;
    for(int i=0;i<iDataLength/sizeof(data_t);++i)
    {
      data_t val=typedbuffer[i];
      //verarbeite val
    }
    

Anmelden zum Antworten