Wert des an eine Funktion uebergebenen Pointers

Gast #1792415
Lesenswert?

Ich habe hier einige Funktionen, die unterschiedliche Datentypen aus 
einen Puffer extrahieren. Damit ein Folgeaufruf einer solchen Funktion 
an der richtigen Stelle des Puffers ausliest, wird der Pointer um die 
Groesse des Datentyps inkrementiert.
1
void BufferReadWord(unsigned int *uwData, unsigned char **ucBuffer)
2
{
3
    *( (unsigned char*) &(*uwData))      = **ucBuffer;
4
    (*ucBuffer)++;
5
    *(((unsigned char*) &(*uwData)) + 1) = **ucBuffer;
6
    (*ucBuffer)++;
7
}
8

9
unsigned char * pucFlashSeeker;
10
unsigned int    config;
11
unsigned long   setup;
12

13
BufferReadWord ( &config, &pucFlashSeeker);
14
BufferReadDWord( &setup,  &pucFlashSeeker);

Das Inkrementieren des Pointers klappt. Leider wird der Wert nicht 
korrekt extrahiert.
1
*( (unsigned char*) &(*uwData))      = **ucBuffer;

Ich habe bereits diverse Konstruktionen versucht. Wie komme ich an den 
Wert, auf den der an die Funktion uebergebene Pointer zeigt?
Gast #1792455
Lesenswert?

Der char-Puffer kann in beliebiger Reihenfolge verschiedene Typen 
aufnehmen. Dazu werden sie in chars zerlegt und beim Einlesen wieder 
zusammengebaut, damit es keine Probleme mit dem Alignment gibt.

Ein Versuch mit
1
*( (unsigned char*) &(*uwData))      = *((unsigned char*) *ucBuffer);

liefert das gleiche Ergebnis wie
1
*( (unsigned char*) &(*uwData))      = (unsigned char*) *ucBuffer;


Im Puffer steht jeweils  0x12 0x12
und gelesen wird         0x02 0x02
Gast #1792465
Lesenswert?

Hi
>liefert das gleiche Ergebnis wie..
kann eigendlich nicht sein! Da die Rechten Ausdrücke verschieden sind.
1
*((unsigned char*) *ucBuffer);
der Inhalt auf den der emb. Pointer zeigt
und das ist der
1
(unsigned char*) *ucBuffer;

emb. Pointer selber -> seine Adresse

die Lösung von rufus scheint schon richtig zu sein.
Beitrag "Re: Wert des an eine Funktion uebergebenen Pointers"
Schon getestet???

mfg
Stephan
Gast #1792591
Lesenswert?

Ich habe das Ganze zuvor per Macro abgewicket und es hat ohne Probleme 
funktioniert. Im Laufe der Zeit ist der Code aber wie ein Hefeteig 
aufgegangen, deswegen jetzt jetzt per Funktion.
Sollte eigentlich auch klappen. Da ich jetz aber Referenzen benoetige, 
glaube ich, dass eben hier der Fehler steckt...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren