Struktur Bitfeld in Struct Bitfeld kopieren

OP #2625925
Lesenswert?
• ▲
▼
Hallo

ich habe zwei struct erstellt um zwei Register nachzubilden.

Nun möchte ich den Inhalt von

struct struct_Src {

       unsigned int a:   4;
       unsigned int b:   4;
       unsigned int c:   8;
       unsigned int d:   8;
       unsigned int e:   8;

}Src;

an

struct struct_Dst {

       unsigned int dst:   16;

}Dst;

übergeben.

Hier ist mein Ansatz

=======================================================================
#include"stdio.h"

typedef struct struct_Src {

       unsigned int a:   4;
       unsigned int b:   4;
       unsigned int c:   8;
       unsigned int d:   8;
       unsigned int e:   8;

}Src;

typedef struct struct_Dst {

       unsigned int dst:   16;

}Dst;

 void set(Src* pset){

   pset->a = 1;
   pset->b = 2;
   pset->c = 1;
   pset->d = 1;
   pset->e = 0;

 }

 void cpy(Src* pSrc, Dst* pDst)
{
   pDst = pSrc;
}

int main(void)
{

  Src mySrc;
  Dst myDst;
  set(&mySrc);
  cpy(&myDst);

  return 0;
}
=================================================

Da mein Lösungsansatz nicht funzt wäre ich über einen Lösungsansatz sehr 
dankbar!

Frohe Ostern!!!
OP #2626379
Lesenswert?
• ▲
▼
@mfgkw, union

danke für die rasche Antowrt.

Ja mggkw, funzt nicht ist eine sehr vage Beschreibung meines Problems.

Da dieses Gebiet für mich Neuland ist konnte ich die Problemstellung 
nicht besser umreißen. Srry dafür.


Also nochmal ausführlicher:

Src -> zu übertragende Nachricht

Dst -> mein Transfer Register
Mal angenommen die Nachricht ist 32-bit groß, aber das Transfer-Register 
hat nur eine Kapazität von 16-bit.

Also würde ich gerne die ersten 16-bit von Src übergeben und nach dem 
Transfer die nächsten 16-bit.

Gibt es da eine bestimmte vorgehensweise ?

Kann man Src als char casten und mit einer for schleife nur die ersten 
16-bit senden ?

Gruß
#2626389
Lesenswert?
• ▲
▼
ja, kann man - auch wenn man Probleme mit Portabilität bekommen kann.
Da du aber gar keine Byte haben willst, sondern jeweils 16 Bit, könnte 
man auch auf uint16_t casten (natürlich mit ähnlichen Problemen, nur in 
diesem Fall einfacher als char*).

Man kann auch eine union verwenden (Prinzipiell mit denselben 
Problemen).

In beiden Fällen sollte man sich im Klaren sein, was in welcher Hälfte 
steht und ob der Empfänger das genauso sieht (Litte endian/big endian).

Das Thema wird hier alle paar Tage durchgekaut. Es sollte mit wenig 
Aufwand einiges dazu zu finden sein...

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.