Zum Inhalt springen

Zeiger und deren Interpretation


etreu

Empfohlene Beiträge

Ich habe gerade ein Problem Zeigern. Kurz sikzziert sieht es in etwa so aus:


abc_t* variable;    // abc_t ist ein struct mit typedef

uint8_t* bytes;     // uint8_t ist im prinzip ein alias für char


variable = (abc_t*) methodeDieEinVoidZeigerLiefert();

bytes = (uint8_t) variable;

Wenn ich jetzt Änderungen an der Struktur von variable vornehme, sollte sich doch der Inhalt von bytes ebenfalls ändern, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das struct hat ein 16 bit Feld. Gesehen als byte-Array sind das ist {0,0}. Wenn ich dem Attribut den Wer 100 zuweise, dann wollte ich als byte-Array {0,100} erhalten - das meine ich mit sehen.

Das struct wird byteweise versendet. Bevor ich es auf der Empfängerseite rekonstruiere, will prüfen, ob auch die richtigen Daten gesendet werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das struct hat ein 16 bit Feld.
Sonst nichts? Falls doch: Ist dir klar, dass der Compiler gegebenfalls fürs Alignment Füllbytes in deine Struktur packt? Guckst du sicher an der richtigen Stelle ins Array?

Wenn ich dem Attribut den Wer 100 zuweise, dann wollte ich als byte-Array {0,100} erhalten
Oder {100,0}, je nach Endianness des Systems - die binäre Repräsentation im Speicher ist nicht standardisiert.

das meine ich mit sehen.
Du hast meine Frage nicht verstanden. Es geht darum, wie du den Inhalt dieses Arrays prüfst. Hast du da ein if im Code, oder lässt du dir das irgendwie ausgeben, oder benutzt du einen Debugger? Gesehen (also mit den Augen) habe ich Bytes bisher noch nicht ;)
Link zu diesem Kommentar
Auf anderen Seiten teilen

Sonst nichts? Falls doch: Ist dir klar, dass der Compiler gegebenfalls fürs Alignment Füllbytes in deine Struktur packt? Guckst du sicher an der richtigen Stelle ins Array?

Natürlich hat das struct noch ein paar Felder mehr. Eines der Felder ist ein Pointer auf eine andere Datenstruktur.

Oder {100,0}, je nach Endianness des Systems - die binäre Repräsentation im Speicher ist nicht standardisiert.

Ist klar.

Ich lasse mir das Array in einer Schleife via printf ausgeben - Debugger oder änhliches ist auf der Plattform etwas komplizierter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Andere Frage zum Verständnis. Die beiden gekennzeichneten Ausgaben sollten doch die selben Werte liefern, oder?


for (i = 0; i < neighbourtable.numNeighbours; i++) {

  #ifdef SHOW_PRINTF

  printf("append neigh: %d@%lu\n", neighbourtable.entries[i].info.nodeId, neighbourtable.entries[i].info.sqn);

  printfflush();

  #endif

  memcpy(neighbourhood->entries + i, &neighbourtable.entries[i].info,sizeof(neighbour_info_entry_t));				

  #ifdef SHOW_PRINTF

  printf("appended:  %d::%d@%lu\n",i, neighbourhood->entries[i].nodeId, neighbourhood->entries[i].sqn); // AUSGABE 1

  #endif

}


for (i = 0; i < neighbourtable.numNeighbours; i++) {

  #ifdef SHOW_PRINTF

  printf("check neigh %d: %d@%lu\n",i, neighbourhood->entries[i].nodeId, neighbourhood->entries[i].sqn);  // AUSGABE 2

  printfflush();

  #endif

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, dann kann ich aufhören an mir zu zweifeln - dann versteh ich die Welt nicht mehr.
Dann gib uns doch mal die Möglichkeit, dir zu helfen, indem du das konkrete Problem beschreibst. Am besten mit einem Minimalbeispiel, das den Fehler reproduziert.

Das Herumgeeiere mit Verständnisfragen bringt dich ja offensichtlich nicht weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...