Hallo,
wie kann man in einer Schleife innerhalb einer Funktion eine Variable
mit 3 Byte (var3b) um 1 Byte verschieben und ein neues Byte (var1b)
hinzufügen, und im 2. Schritt ab einer variierenden Position ein Byte
auslesen?
(Jeder Buchstabe entspricht ein Bit 0 oder 1, Reihe mit gleichen
Buchstaben entspricht 1 Byte und Daten sollen zwischen Funktionsaufruf
nicht verloren gehen):
Loop1:
AAAAAAAABBBBBBBBCCCCCCCC (var3b - Anfangswert)
BBBBBBBBCCCCCCCC.... (Verschiebung um 1 Byte)
BBBBBBBBCCCCCCCCDDDDDDDD (var3b - hinzufügen von var1b)
Auslesen ab Pos. (z.B.) 7 = BBCCCCCC
Loop2:
BBBBBBBBCCCCCCCCDDDDDDDD (var3b)
CCCCCCCCDDDDDDDD.... (Verschiebung um 1 Byte)
CCCCCCCCDDDDDDDDEEEEEEEE (var3b - hinzufügen von var1b)
Auslesen ab Pos. (z.B.) 4 = CCCCCDDD
Loop3:
Funktionsaufruf:
static char *var3b="XXX"; //Wert soll in Fkt. erhalten bleiben,
//String Definition 3Byte
char var1b, wert; //char Definition 1 Byte
*var3b=(*var3b << 8); //Verschiebung der Var um 1 Byte
*(var3b+2)=*var1b; //Hinzufügen des neuen Bytes an leere Pos.
Beim Auslesen von var3b zeigt sich an dieser Stelle keine Änderung
gegenüber des Ausgangswertes.
wert=(* var3b >> 7); // Auslesen ab Pos. 7 = BBCCCCCC (Loop1) - in
Ordnung ???
Vielen Dank im Voraus für jeden Tip.
MFG
Silvio
32-Bit-Variablen verwenden (DWORD). Shift-Operatoren und logische Operatoren (AND/OR) sollten das Problem lösen. Nehmen wir mal an, die Anfangswerte sind in einzelnen Byte-Variablen namens A, B, C und D enthalten (um kompatibel zu Deinem Bit-Beispiel zu bleiben). BYTE A; BYTE B; BYTE C; DWORD Variable; BYTE Ergebnis; // Startzustand herstellen Variable = (A << 16) | (B << 8) | C; // um 8 Bits verschieben Variable <<= 8; // Resultat extrahieren (Bits 13..20) Ergebnis = (Variable >> 13) & 0xFF; Klar?
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.