Hallo an alle,
ich habe ein Problem mit dem Hin- und Herschieben von Bits. Habe ich
scheinbar noch nicht ganz verstanden.
Ich habe einen Wert per #define angegeben. Beim Aufruf einer Funktion
übergebe ich diesen Wert an die Funktion. Die Daten der Variablen möchte
ich nun Bit für Bit abrufen und abfragen, ob das jeweilige Bit 0 oder 1
ist.
Hier mal etwas Code
1 | #define DATENSATZ 100
|
2 |
|
3 | CallFunction(DATENSATZ);
|
4 |
|
5 | void CallFunction(uint32_t daten)
|
6 | {
|
7 | for(k=0;k<32;k++)
|
8 | {
|
9 | if(daten & 0x80000000)
|
10 | // Do something
|
11 | else
|
12 | // Do something else
|
13 | daten <<= 1;
|
14 | }
|
15 | }
|
Das Funktioniert auch soweit.
Ich habe jetzt folgendes Problem, dass ich teilweise nicht alle Bits
überprüfen möchte, sondern nur die letzen z.B. 20.
Also habe ich mir gedacht, ich schiebe dann vor der For-Schleife die
Daten 12 Schritte nach links und überprüfe die Daten. Dabei veränder ich
dann natürlich die Bedingung i<32.
Vielleicht mal ein Beispiel:
1 | #define 699594 // bin: 10101010110011001010
|
2 | k= 0;
|
3 | k= 32-laenge; // laeng = 20
|
4 | data <<= k;
|
5 |
|
6 | for(k=0;k<laenge;k++)
|
7 | {
|
8 | if(daten & 0x80000000)
|
9 | // Do something
|
10 | else
|
11 | // Do something else
|
12 | daten <<= 1;
|
13 | }
|
Leider funktioniert das nicht so richtig. Ich bekomme dann nicht die
Daten, die ich erwarte.
Ich habe z.B. Daten die 28 Bit Lang sind und welche mit 19
Bit.Komischerweise funktioniert das Ganze mit den 28 Bit langen Daten
aber nicht mit den 19 Bit Daten.
Hat jemand eine Idee, was ich da falsch mache? BZW. gibt es einen
eleganteren Weg?
Später möchte ich das ganze eventuell dazu nutzen, einen Port
entsprechend der Daten zu toggeln.
Ich hoffe, ich konnte das Problem einigermaßen darstellen.
Gruß
Thorsten