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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.