Wie jedes zweite Bit speichern

OP #1236633
Hallo,

ich habe folgendes Problem, ich habe ein 8 Bit Datenwort, ich will aber 
nur jedes 2 Bit in einer Variablen Speichern.
z.B. Daten=01010101, ich will jedes zweite Bit speichern, hintereinander 
Daten2=00001111. Ich muss also jedes zweite Bit in meine zweite Variable 
schieben, aber wie?

Vielen Dank
Gast
Daten2 = (Daten & 0x01) | ((Daten >> 1) & 0x02) | ((Daten >> 2) & 0x04) 
| ((Daten >> 3) & 0x08);

Man könnte es auch mit einer Schleife realisieren...
Gast
>Warum willst du jedes zweite Bit hintereinander speichern?

Ist doch egal, oder?
Warum fährt der Mensch zum Mond oder sucht in Lichtjahren entferneten 
Galaxien nach Leben?
z.B.:
1
  uint8_t Daten  = 0x55; // binaer 01010101
2
  uint8_t Daten2 = ( ( Daten & 0x01 )
3
                     |
4
                     ( ( Daten >> 1 ) & 0x02 )
5
                     |
6
                     ( ( Daten >> 2 ) & 0x04 )
7
                     |
8
                     ( ( Daten >> 3 ) & 0x08 )
9
                     );
10
  // Daten2 sollte jetzt 0x0F (binaer 00001111) sein
Gast
>Ist doch egal, oder?

Nicht unbedingt. Wenn man mehr über das Problem weiß, gibt es evtl. 
bessere Ansätze.


>Stichwort Manchester ?

Wenn es um eine RC5 Dekodierung geht, das geht auch komplett anders.
OP
Ist eine SPI Übertragung von 16 Bit, brauche aber nur jedes zweite Bit. 
Es werden erst 1*8Bit übertragen, von diesen 8Bit brauche ich aber nur 
4Bit(jedes zweite), dann nochmal 8Bit, von denen ich auch nur 4Bit 
brauche(jedes zweite), diese werden jeweils in einer Variablen 
gespeichert,danach werden diese 2*4Bit wieder zusammen in eine Variable 
geschrieben. Und dann ausgegeben.

Daten1=00001111
Daten2=11110000

Wert=Daten1|daten2

so ist es mal angedacht:-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.