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
Daten2 = (Daten & 0x01) | ((Daten >> 1) & 0x02) | ((Daten >> 2) & 0x04) | ((Daten >> 3) & 0x08); Man könnte es auch mit einer Schleife realisieren...
>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
|
Vielen Dank schonmal für die Antworten. Wie würde es denn mit einer Schleife realisiert werden? Zu diesen 4Bits kommen später nochmal 4Bits dazu, die Oder-Verknüpft werden. Deshalb hintereinander.
@Klaus: Danke für die Bestätigung. @Patrick: Die Schleife kannst du dir selber überlegen... ;)
> Wie würde es denn mit einer Schleife realisiert werden?
Warum auf Biegen und Brechen umständlicher und langsamer machen?
>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.
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:-)
ok, aber dann schiebt man die zweiten Daten aber hoffentlich nicht wie oben nach rechts, um sie dann wieder um 4 nach links zu schieben, sondern analog gleich nach links...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.