Shiftoperation sinnvoll?

Gast #2160762
Lesenswert?
• ▲
▼
Hallo,
im Anhang habe ich ein CAN protocoll eingestellt.
Ich möchte die Daten passend auf jeweils 1 byte splitten.

Bisher meine Idee:
1
Byte1 = (unsigned char) (Data1 >> 6);
2
Byte2 = (unsigned char)((Data1 << 2) + (Data2 >> 12));
3
Byte3 = (unsigned char)(Data2 >> 4);
4
Byte4 = (unsigned char)(Data2 << 4) + (Data3 >> 10);
5
Byte5 = (unsigned char)(Data3 >> 2);
6
//...

Man erkennt schon die Problematik, was die Übersichtlichkeit des Codes 
angeht.

Gibt es für solche Dinge eine geschikte Lösung, die dann auch noch 
halbwegs lesbar ist?
Mir fällt gerade nichts ein, deshalb mein post.

Grüße
mx
Angehängte Dateien:
Gast #2160823
Lesenswert?
• ▲
▼
Hi da habe ich auch schon daran gedacht, nur irgendwie muss ich die 
Daten da ja auch rein bringen. Ein byte kann ja bits von 2 unabhängigen 
Daten enthalten.
Geht das mit einem Struct ohne Shiften, ich weiß nicht wie?

Kannst du mir da ein Beispiel zeigen?
#2160867
Lesenswert?
• ▲
▼
makrox schrieb:
> Kannst du mir da ein Beispiel zeigen?


union CanMsg
{
  struct RawData{
    uint8_t bytes[8];
  }rawData;

  struct MyData
  {
    unsigned dummy: 8; // Byte 0 not specified
    unsigned data1:14;
    unsigned data2:14;
    unsigned data3:14;
    unsigned data4:14;
  }structuredData;
}

must halt schauen, ob die Bits korrekt auf die Daten abgebilded werden.
Das ist höchst architektur- und compilerabhängig, deswegen eigentlich 
nicht zum Datenaustausch zu empfehlen.

Besser ist was generisches, was eine abstrakte Nachrichtenbeschreibung 
nimmt und diese in einen anderen Typen umwandelt, bzw eine 
Struktdefinition und  Konvertierungsroutine erstellt

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.